Multiple Event Instances Bug?

OK, here’s the situation:

Note: the laser object stores a “laser terminator” variable that tells the laser what object it’s ending or reflecting on.

Scenario:
Laser object ‘hits’ (raytraces) a mirror. Some calculations are done, a new laser is spawned.

Note: this new laser’s trajectory makes it hit the very edge (non-reflective) of the mirror. Since the mirror doesn’t care about that (it’s a non-reflective component), it ignores it and does nothing.

This new laser is stored in a map (variable local to the mirror) with the original laser as the key. When the original laser is destroyed, it activates the mirror’s “OnLaserHitEnd” event, which does several things:

1) Check to see if the laser object whose hit is ending has an associated 'emitted laser' in the map variable.
2) If so, it destroys that actor.
3) Deletes the key/entry in the map for the laser object

When a laser is destroyed, it tells it’s “LaserTerminator” so by calling the “OnLaserHitEnd” function.

Let’s call these lasers Laser0 (original) and Laser1 (reflected). When Laser0 calls the mirror’s “OnLaserHitEnd” event, here is what should happen:

1) Mirror finds Laser1 in the map using Laser0 as the key.
2) Mirror destroys Laser1.
2) 1) Laser 1 fires Mirror's "onLaserHitEnd" event
2) 2) Mirror finds nothing in the map for Laser1, and therefore does nothing
3) Mirror deletes the key/entry in the map for Laser0

Here is what IS happening, which is causing problems down the line:

1) Mirror finds Laser1 in the map using Laser0 as the key.
2) Mirror destroys Laser1.
2) 1) Laser 1 fires Mirror's "onLaserHitEnd" event
2) 2) Mirror finds nothing in the map for Laser1, and therefore does nothing
3) Mirror deletes the key/entry in the map for **Laser1**

So it’s as though the “OnLaserHitEnd” event, because it has an instance running inside an instance, fails to return to the original value passed it in the “outer” instance (Laser0) and instead continues it’s loop with the inner instance’s variables.

I have no idea why this is happening. I’ve run, step-by-step debug multiple times and come to the same conclusion: When the outer instance finishes the inner instance and returns to its flow, it does so with the inner instance’s variables. Can anybody help me figure out WHY, and help me stop it from doing this? Thanks!

To avoid xkcd: Wisdom of the Ancients, I’ve found a workaround - not a solution. Note: A lot of event things don’t seem to propagate properly if they call themselves. The workaround is to trash the event and use a function instead. Sometimes the event can just call the function, but for some cases that might not work. With the function in place, all instances complete properly.