I found out what was going wrong with the smoke, and it was something that made me wonder how the renderer ever worked. I had bypassed some code in the rendering system that set some important control flags based on the Z-buffer state, so rendering ended up in a messed-up state.