The @ checks for the condition every frame so I assume that it would time-out while they are moving about. I don't know how that affects the script.
Here's my my version of your script (sry I'm not comfortable with sqs):
if(!isServer) exitWith{};
private ["_trackleader", "_trackers", "_dist", "_chosenPrey", "_waypoint1"];
_trackleader = _this select 0;
_trackers = group _trackleader;
_dist=0;
{if((side _x == west) && (alive _x)) then {if((_x distance _trackleader) > _dist) then {_chosenPrey=_x; dist=(_x distance _trackleader);};};} forEach playableUnits;
_waypoint1 = _trackers addwaypoint[getpos _chosenPrey,0];
_waypoint1 setwaypointtype "MOVE";
_waypoint1 setWaypointBehaviour "AWARE";
_waypoint1 setWaypointFormation "LINE";
call compile format["_waypoint1 setWaypointStatements ['true', 'Nul = %1 execVM ""tracking.sqf""'];",_trackleader];