I've found an interesting difference between the JCA impelementations in 2.4.x and 3.0.x. (I'm porting my JCA Adapter to 3.0.7)
If an error occurs with a managed connection and it fires the error occurred event, and subsequently someone tries to close the same connection an IllegalStateException is thrown as the connection manager does not recognise the connection begin returned to it. (the error event caused it to be removed from the connection managers pool).
It seems a bit extreme that the ConnectionManager should throw an unchecked exception in this case.