Because you are setting the speed only once. You need to hook Ham_Item_PreFrame and set it there as well, because for example, if you strip weapons (like you do in your code for the first player found), it resets his speed as well so he can move freely.
Also you should set the task only once and loop in it again instead of setting a different task for each player.