Ok, I looked at the barrel bug, and here's what I noticed (summary of "case 486" in ScanInfoPlane() of 3D_GAME.C and it's internal functions): When a detonator is spawned, it also spawns a "reserve", which it hides at location (0,0) so that when you set the detonator off, it has an extra actor already loaded that it can just "move" to the right place when you drop the bomb (originally a static sprite).
The problem is that the game checks if an actor is "visible" by looking at it's 9 surrounding tiles (ie. a 3x3 block around the object), so when you're looking "around" location (0,0), 4 of the spots you check will not even be on the 64x64 grid at all (for me, tilemap is directly before spotvis in BS_FIRE.MAP), and any data above 0 in those "out of bounds" memory locations will tell the game that the object is visible.
An easy fix is to just add this to DrawScaleds() of 3D_DRAW.C:
spotloc = (obj->tilex<<6)+obj->tiley; // optimize: keep in struct?
visspot = &spotvis+spotloc;
tilespot = &tilemap+spotloc;
if (!spotloc) continue;
// could be in any of the nine surrounding tiles