I think the problem is with "Wait 2 seconds" action. You should never use Wait in events which run on every tick. This creates hundreds of delayed threads for each enemy. And even if this enemy gets LOS to the player, those delayed threads continue firing..
Add a "state" instance variable to enemies and use Timer behavior instead of the wait.
When enemy is in "chase" state and no longer has LOS to the player, switch to "patrol" state and start a timer for 2s. In the timer event find a path to last known location.
When enemy is in "patrol" state and gets LOS, stop the timer and switch to "chase" state.