There were many reasons I was generating chambers that had no outlets, but one of them was that they were overlapping each other. So, I added collision checking and something to make sure gaps in shared walls weren't overwritten.
But then I ran into these weird double walls. That turned out to be happening because sometimes, when there was a collision in a potential new chamber, even though the game decided not to use and draw that chamber, it still used the bad to decide where the next one should be. e.g. When putting a new chamber to the right of the previous one, it put it to the right of the rejected one (which is never drawn), not to the right of the last good one.
This took quite a while to figure out. Something that really helped was having the debug logs create svg instead of just lists of numbers. Then, I could paste it into an html file and look at shapes being drawn with labels on them instead of long lists of numbers. (The pictures above are of the web page.)
I bet there's a way to build visual diagnostics into your game, but I'm not tha good with GameMaker yet.