So, looked at this patch, and it looks like it would work just fine. I would feel good about committing it; I'll defer to slyz in case there were changes he wanted to make to it.
This does some fanciness in handleEvilometer that basically looks at the last monster fought, loops over the cyrpt zones, looks to see if a monster from those zones matches the last monster, and if so, decrements the appropriate counter. Nifty. Perhaps the creation of a utility method isWanderingMonster() would take a similar approach and would be a first step towards implementing that feature request to add counters for such things.