Here's a simple code to demonstrate the problem:
player allowDamage false; player addEventHandler ["HandleDamage", { systemChat "EH 1"; _this#0 removeEventHandler ["HandleDamage", _thisEventHandler]; }]; player addEventHandler ["HandleDamage", {systemChat "EH 2"}]; player setVelocity [0,0,-100];
The above code will only show "EH 1". If the removeEventHandler line is commented out, both systemChats will be shown.
This bug is similar to doing:
_array = [1,2,3,4,5,6]; _newArray = []; { _newArray pushBack _x; _array deleteAt _forEachIndex; } forEach _array;
which will give [1,3,5]