I'm not sure if it was intended or not, but for some reason, the hunt_victim and all related tracking code completely ignores the ROOM_NO_MOB flag when it's doing its considerations. To me, it doesn't make much sense... Sounds like an easy way to get mobs out into places they're not supposed to be. This appears to affect all 3 codebases.
For SWR, in track.c, in function hunt_victim(), find:
...Actually, I came to find that the way I "fixed" this caused a crashbug. I'm not absolutely sure why, to my annoyance, but I suspect it has something to do with an extra tidbit in SWR's hunt_victim that will attempt to move a mob in a random direction regardless, if find_first_step returns BFS_NO_PATH. The only problem is that beyond that, I really don't know WHY it's doing it... It seems invalid values are being passed, and I can't tell why.