The getImplementation() method of SaajSoapMessage uses SaajUtils to determine which version of SAAJ is being used. However, SaajUtils uses messageFactory.newInstance() to do this, which returns the default MessageFactory. This may not be the same MessageFactory that was used to create the SOAPMessage which was used to construct the SaajSoapMessage.
In some cases (which is how i discovered this problem), the call to MessageFactory.newInstance() as invoked by SaajUtils fails completely. In my case it's because I'm using a JBoss environment with their WebServices stack removed, but it still looks for the JBoss SAAJ implementation and fails.
I think SaajUtils isSaaj13() and isSaaj12() need to be rewritten to be given the MessageFactory on which to operate, rather than using the environment default.