http://sqlfiddle.com/#!9/869812/21
SELECT l.`entry`,
l.`challenge_level`,
l.`proof`,
l_max.player,
l.`submission_date`,
l.`approved`
FROM leaderboards l
INNER JOIN
(SELECT player, MAX(challenge_level) as `level`
FROM (SELECT l1.`entry`,
l1.`challenge_level`,
l1.`proof`,
l1.`player1_name` as player,
l1.`submission_date`,
l1.`approved`
FROM leaderboards l1
UNION ALL
SELECT l2.`entry`,
l2.`challenge_level`,
l2.`proof`,
l2.`player2_name`,
l2.`submission_date`,
l2.`approved`
FROM leaderboards l2
UNION ALL
SELECT l3.`entry`,
l3.`challenge_level`,
l3.`proof`,
l3.`player3_name`,
l3.`submission_date`,
l3.`approved`
FROM leaderboards l3
UNION ALL
SELECT l4.`entry`,
l4.`challenge_level`,
l4.`proof`,
l4.`player4_name`,
l4.`submission_date`,
l4.`approved`
FROM leaderboards l4
) l_all
GROUP BY l_all.player) l_max
ON l.challenge_level = l_max.level
and (l.player1_name = l_max.player
OR l.player2_name = l_max.player
OR l.player3_name = l_max.player
OR l.player4_name = l_max.player)