Yes, and in addition to this a point might be:
5. Player B can join a game that Player A hosts. Player B cannot join Player A's hosted game if any other player has yet joined. Player B has not successfully connected to games hosted by any other players. Player B has not successfully hosted any games (even with a single human opponent.)
There are other things which I think are obvious to people that have spent any time trying to coordinate games with specific people as well...
1. If someone who can't join tries, they effectively kill any chances for normally valid players to join. E.g. Player A hosts, Player B can always join Player A's games. However, Player C tries to join first, and fails...Now Player B cannot connect to the game, neither can players D, E, F.
2. If you want to have another shot at joining or hosting after any games are completed or after joining or failing to join a game, you must close and reopen the application.
It appears a lot of the trouble here has to do with successfully closing failed connections and connection attempts. Maybe the newer netcode is doing this now but we are impatient in waiting for a timeout/error? A wait of 60 seconds to join a simple game lobby is probably unacceptable for most users, especially without a progress indicator.
A lot of these could be at least mitigated if we offered more verbose indicators to the client. A status which shows "Connecting to Yuriken, negotiating, Success! Connecting to RedCheckers, negotiating, negotiating try 2/3, Failure! You lose, reboot your machine, your router, your mom, and try again!"