Well I was close: I decided to get some work into PrBoom instead. And I finally nailed down the level end crash! Turns out there was already a check in one place for sounds to be turned off before unloading the other level, but there was another place where that unload was happening, and that didn’t have a check.
Well, since we don’t very well need to free the same memory tag twice, I just commented it out, and we’ll see how it goes.