To expand on the explanation given on the forums;
1. org.jivesoftware.openfire.muc.spi.MultiUserChatServiceImpl#processPacket calls org.jivesoftware.openfire.muc.spi.MultiUserChatServiceImpl#getChatUser to get/create a user.
2. org.jivesoftware.openfire.muc.spi.MultiUserChatServiceImpl#processPacket calls org.jivesoftware.openfire.muc.spi.LocalMUCUser#process(org.xmpp.packet.Presence)
3. In a background thread, org.jivesoftware.openfire.muc.spi.MultiUserChatServiceImpl#checkForTimedOutUsers removes the user as they have not joined the room
4. org.jivesoftware.openfire.muc.spi.MultiUserChatServiceImpl#processPacket calls org.jivesoftware.openfire.muc.spi.LocalMUCUser#process(org.xmpp.packet.Presence) tries (fails) to add the user to the room.