real explosions aren't always predictable either :p
ok, for 3D explosions, I did not look at how original xcom does explosions, I just made something that I could easely code and understand.
I use raycasting from the center of the explosion outwards, like a point light. Each ray has a starting power, the power reduces by distance and it can be dramatically reduced or even blocked by objects (depending on their HE block value)
When a ray crosses a tile, the objects (and unit) on that tile are affected by the power the ray has at that time. It keeps track of which tiles already have been affected, so they can be skipped if another ray crosses the same tile.
The method is similar for smoke and incendiary explosions.
There are probably things that still can be optimised, but it works and we didn't have any complaints about explosions being slow or unrealistic.