In cases where a room is non-anonymous, the JID is available in the presence of a user sent from the groupchat server, a private chat should be started with that JID and not the JID that the presence packet comes from which is the groupchat room JID + resource attached.
Deferring as it is a little more complicated than first anticipated. This behavior depends upon the contact object which is a little messy, so, it would take some investigation to see if changing the getJID on the contact object to reflect the true JID would have any adverse side-effects.