EventListener won't get removed if there is too much to execute during an event

I have a rather peculair situation here. It goes as follows:
One can see 2 if-statements in the function of this MOUSE_UP event.
The first if-statement works well, but only on it’s own. Yet when the second if-statement is added then
the removeEventListener method in the first if-statement doesn’t seem to get executed anymore. And it’s not because the second if-statement would cause the removed event listener to be directly added again. If the first and second if-statements would not be in a for-loop, then the event listener in the first if-statement WILL get removed. So what this looks like is as if on the event of MOUSE_UP the flash engine seems to have to iterate through too much code and simply refuses to remove the event listener in the first if statement. Atleast that’s what it looks like, but i’m not sure.
The thing is the snapping works at all times, but the eventListener only gets removed if there’s not too much code to execute in the function of the MOUSE_UP event. Which seems weird.
What can i do? What’s going on here? Is this a bug or limitation in flash CS3 or Actionscript 3?

[AS]
//Listen for an overlap of a symbol and a default slot position on every MOUSE_UP event.
//This should help handle and detect a player dropping symbols in slots.
function checkIfDropIsOverSlot():void{

for(var i_0001:int=0; i_0001 <= 8; i_0001++){
 
 if(getSymbolType().hitTestPoint(Slot._dSlotPosX[i_0001], Slot._dSlotPosY[i_0001], false)){ 
  
  movementTimer.removeEventListener(TimerEvent.TIMER, runOnce); //Remove the eventlistener of movementTimer so that it no longer listens to dispatched timer events
  
  //Then snap it to the slot's snap point
  getSymbolType().x = Slot._dSlotPosX[i_0001];
  getSymbolType().y = Slot._dSlotPosY[i_0001];
  getSymbolType().rotation = 0; //Set rotation to 0 degrees
       
 }
 
 //Check if drop is not over a slot
 if((getSymbolType().hitTestPoint(Slot._dSlotPosX[i_0001], Slot._dSlotPosY[i_0001], false)==false) && (movementTimer.hasEventListener(TimerEvent.TIMER)==false)){
 
  movementTimer.addEventListener(TimerEvent.TIMER, runOnce); //Re-add the eventlistener to movementTimer so that the symbol can start moving again by listening to dispatched timer events again.
 
 } 
 
}    

}
getSymbolType().addEventListener(MouseEvent.MOUSE_UP, checkIfDropIsOverSlot);
[/AS]