Em geral ORDER BY em uma subconsulta não faz sentido. (Só funciona quando combinado com FETCH FIRST/LIMIT/TOP etc.)
A solução é usar uma subconsulta correlacionada para encontrar o peixe mais pesado para o nome de usuário, localização e combinação de espécies da linha atual da "consulta principal". Se houver empate, ambas as linhas serão devolvidas.
SELECT *
FROM entries e1
WHERE username = :user
AND CAST(weight AS DECIMAL(9,3)) = (select max(CAST(weight AS DECIMAL(9,3)))
from entries e2
where e1.username = e2.username
and e1.location = e2.location
and e1.species = e2.species)
Note que char para peso ainda é uma má escolha, porque você tem que converter os dois lados ao comparar valores. Volte para decimal em sua tabela!