*A lot of work* is the right answer!
So far, I've had to use a few different techniques to create the shape of the shadows.
Those spikes from Dungeon 3 are identical to those found in another one (can't remember off-hand which) except these have no shadows because in this dungeon, spikes can hang in the air instead of always being on the ground. So I just took the shape of the shadow from the identical spikes that do have one.
For round pillars and square blocks, I'm basically using the upper "north" and lower "south" edges for the exact shape, and use the surface to determine the exact placement for that block in relation to the tile grid. It's hard to explain but I've made a few templates for grid alignment for every type of blocks I've used so far. Some things are highly simplified such as the caged skeletons in Dungeon 1 having a full, round shadows.
After that, I basically have to rebuild the room in as many horizontal layers as required for the shadows to make sense. The game itself builds a room from 3 or 4 basic blocks (cage, pillar, block, spike, etc) then builds a single composite layer that is displayed over the empty floor/wall layer. If there are multiple elements in a given room that would project shadows over one another, I have to determine which elements are located at which position and height, then replicate each horizontal layer separately and add in additional layers in-between for the shadows with simple homemade masks. It's long and complicated but strangely exciting to do!
The shadows done this way are far from perfect, but they give a better understanding for the layout at a first glance. I still need to determine a good way to represent blocks that can be moved, blocks there are invisible, blocks with a conveyor effect, blocks that fall as soon as you enter the room, etc.