It is a bug in the parser. The workaround is to have exactly one child element before the xdmp:try, e.g.
<span class="ReceiptCell Date">
<xsl:variable name="node" />
<xsl:value-of select="_1:Date"/>
<xdmp:try>
<xsl:value-of select="if (empty($node)) then '(A)' else xdmp:strftime('%d %b %Y',//_1:Date)"/>
<xdmp:catch name="e">
ERROR Rendering Date
<xsl:copy-of select="$e"/>
</xdmp:catch>
</xdmp:try>
</span>