Hamilton finally took his first victory of the season as the McLaren driver charged back to pass the one-stopping Fernando Alonso's Ferrari and win the Grand Prix for the third time in his career.
Lotus's Romain Grosjean and Sauber's Sergio Perez took the second podium finishes of their careers as they demoted the fading Alonso, who eventually dropped to fifth.
Poleman Sebastian Vettel only finished fourth, but had led Hamilton and Alonso in the opening stint.
The Red Bull driver was the first of the trio to stop for tyres, and found himself jumped by both his rivals as they came in shortly afterwards.
Alonso came off best of all as he vaulted both the Red Bull and the McLaren, but Hamilton was able to re-pass the Ferrari in the DRS zone on Alonso's out-lap.
The McLaren then edged slightly away before coming in for a second tyre stop on lap 49. Alonso and Vettel decided to try and make it to the end on their existing rubber, but Hamilton had the pace to hunt down and pass both of them, going to win and claim the points lead in the process.
Vettel then gave up his one-stop attempt and made a very late tyre stop, while Alonso clung on and hoped to still make it to the end in second, only for his pace to get ever worse.
Grosjean - who had pitted only two laps later than the Ferrari - was soon past Alonso into second, with Perez (who left his sole stop until lap 41) and the recovering Vettel also easily dismissing the Spaniard.
Felipe Massa spun from fifth to 12th in his Ferrari early on, and had to settle for 10th after stopping twice for tyres.
Force India's Paul di Resta had a spell as high as sixth in the early running, only to lose ground with a relatively early first of two pit stops, leaving him 11th.
The second McLaren had to make three tyre stops and finished a lapped 16th, while the rear wing flap on Schumacher's Mercedes jammed open, ending his race.