Now, I've pared everything back to beautiful, readable basic code. And, fingers crossed, it works pretty well! Save for this problem.
Hundreds of lines of bloat were caused by my earlier insistence on avoiding this problem!
This time, I want to fix it with code that is clean, general-purpose, and available to all.
Now, and while the problem is particularly bad for Beholder, I've also had this happen with knockbacks and other stuff that could reasonably occur with any character, which is why I propose an all-purpose fix. Essentially, though: My Beholder has a continually projected gaze. It also has an instant movement ability. This is what happens when you use it:
(The gaze is very faint, but that's because it's the default "off" gaze effect! I broke off refactoring the other stuff to investigate this, so no talent-invested techincolour gazes. Bear with me.)


My instinct would be to refactor the processEffects function in default/engine/Map.lua. This function has the dual purpose of updating any map effects that require updating, and also ticking down their durations while deleting any with a remaining duration of 0.
I propose splitting this function, having it call a new function, updateEffect on each effect present. Ticking down durations will still be handled by processEffects, but we can also use updateEffect from outside of this function. Then, we throw in a condition - for any entity that moves without expending energy - to update the desired effects.
It might be prudent to update all effects present on the map in this scenario, given that an actor moving in front of a projection ought to block that projection, but in the above case the projection would not be updated, so no block.
I can also think of a number of other situations aside from instant teleportation in which my class would benefit from being able to access updateEffect! And maybe, if you also code for ToME, then you can too.
What you do?