when you loop self.protocol.player.name, you also change what player reports as his current planet. easy fix for this:
Replace:
for self.protocol.player.planet in self.player_planets.keys():

With:
 planet = self.protocol.player.planet
 for planet in self.player_planets:

This way it will loop planets in a defined variable, and still compare to players current planet - works as expected.

To replicate the behaviour, add first planet - and register a user on it, go to another planet and register some other user there. When user tries to change something on first planet, he wont be able to - do a /whois on a player, and you'll see he's char is reporting last planet in the list of player_planets, as his current location.