IIRC, I came to the conclusion that the reason you were using $grab/*[name()='call'] rather than $grab/call was that you had namespaces in scope that you weren't showing me. Please bite that bullet, and use $grab/x:call where x is bound to the correct namespace.
But I think (more groping in the dark, it's so much easier when people show you the code) that "if" and "expr" and perhaps "decl_stmt" are not in any namespace.
so you should be able to do
<xsl:value-of select="current-group[not (self::if or self::decl_stmt or self::expr_stmt[expr/call[name=$grab/x:call]])]"
Why not write yourself a function:
<xsl:function name="f:final" as="xs:boolean">
<xsl:param name="n" as="node()"/>
<xsl:param name="grab" as="element()"/>
<xsl:sequence select="self::if or expr_stmt[expr/call[name=$grab/x:call]]">
</xsl:function>
then
group-ending-with="f:final(.)"
and you can reuse the function in your value-of test.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference