When I look at this trigger what comes to my mind is, how does it tracks the order? It's only cycling through all active players and then set or not if that player should be first. But it's not creating a list of players based on their score at all? To me something is missing to keep track of eatch player's position. But i don't have the time to search for an example.
Go through all the players once. If the current score is better than the Highestscore, set the playerposto the current player, and the HighestScore to the current score. That way, you should get the best player in the end.