I am not going to tell you how to fix this problem, but I can explain where your reasoning has gone awry 🙂
Its a common mistake if you are new to SQL.
When you select:
name, max(score)
You are not saying "Give me top score, and the name associated with that score"
You are actually saying "Give me the first name, and give me the max score"
You see... the records are not ordered by score, so the first name off the top will (probably) not match the max score.
This IS a shortcoming of MySQL. A subselect would probably help you fix this problem easily.
Its early, and I can't think of a good way to do this right now, but I am sure someone who is more awake will reply with a good solution.