I have a theory. It lies here:
{_x action ["EJECT",vehicle _x];
sleep 0.6; unassignVehicle _x}
Essentially, a parachute is also a vehicle. So what you're doing is first ordering everyone to eject (at once), upon which you wait half a second, which is plenty of time for them to get inside their NEW vehicles, the parachutes, which they are then ordered to exit right away! So that might be your problem.
However, using forEach is not the best here either, since it means everyone jumps out at the same time, meaning they often knock into each other, killing each other/wrecking the chute. That's why having a proper parajump script is the best, with a slight delay between each jump.
Good luck!
Wolfrug out.