When I recently created an explosion in Blender using the smoke simulation, I encountered a weird behavior I neither could explain, nor fix. But I got an idea how to analyse the problem...
I stored a single, promising frame with the technique I describe in my quick tip on CG Tuts+ on how to store a single frame of baked cache data. Then I animated the ramp of the density texture to get an animation of the density distribution in the simulation:
What did I see? Well, inside of the nice rounded bulp there is considerable vertical movement going on that is also kind of "torn" in the middle, which leads to an early breaking of the bulp. So I figured: Stop working on that simulation, build a new one!