It has been observed that some XAResource implementations throw RuntimeExceptions from their XAResource::end method.
Although this is not spec compliant, it does mean that the transaction will never complete and as such afterCompletion would never be called, nor would we attempt to complete the remaining branches in the transaction.
In ArjunaCore terms the transaction would be left in the state of ActionStatus.ABORTING.
This Jira exists as a possible route for users to vote for addressing this issue. One possibility would be to try to align a RuntimeException with a response of XAResource.XA_RETRY where possible.