A quick follow up because I had an idea on how to approach this that I think would work, but presents edge-cases I can't account for and just isn't as stable as the original brute-force method.
My idea was to identify corner tiles in the generated tilemap and then assign each one a direction. The system then repeats a check in that direction from that corner until it identifies a tile different from the wall connected to the tile:
Tilemap being used (arrows id corners and which direction they check for):
I couldn't use the Auto-16 tilebrush and had to use the 47 in order to identify both inner and outer corners. This ALMOST works:
There are some positioning issues I could work through, the bigger issue is that using this method, sometimes a wall is created that has no "spawn corner":
Short of brute-force checking corners for connecting walls and fixing them after the original run, I can't think of an elegant solution to this. I'm probably going to revert back to the "one tile one 3Dobject approach", but I wanted to document this here in case anyone has a similar issue and wants to refine my approach. Here's my function: