If an XSLT pattern contains a call to the current() function, then the node being tested against the pattern is saved as a variable in slot zero of the stackframe. However, this reserved slot is not taken into account when allocating slots to other variables used in the pattern (including variables introduced by the optimizer. This may result in current() yielding the wrong value, perhaps even an atomic value rather than a node, which can lead to a spurious result or error in the pattern match.
The problem is not new in 9.0, but is more likely to occur because the optimizer is more likely to introduce new variables when rewriting an expression.
A patch is being placed in Subversion. Test case match62 added.