With four laps to go, Verstappen attacked Hamilton around the outside of Turn 4, which was been heavily policed for track limits by the FIA, and as the Dutchman went too wide off the kerb he was ordered to give the place back further around the lap.
Verstappen was able to get back close to Hamilton on the final tour but was not able to attempt another move and lost out by 0.7s.
At the start, Verstappen had covered Hamilton by quickly moving to defend the inside line into Turn 1, successfully defending the lead while Leclerc put the slightly-slower-starting Bottas under pressure for third.
Verstappen led Hamilton around the rest of the first lap, with Leclerc passing Bottas at Turn 4, shortly before the race was neutralised after Haas driver Nikita Mazepin dropped his VF21 by himself running through Turn 3 and spun off into the barriers.
The race, which was cut to 56 laps after Sergio Perez ground to a halt on the initial formation lap before restarting his engine and getting going again to start from the pitlane, restarted on lap four, with Verstappen leaving it as late as possible to head back to racing speed due to the headwind blowing down the pit straight.
After hitting the gas again just before the finish line, Verstappen quickly stole to the inside to again defend the line on the run to Turn 1, with Leclerc also attacking Hamilton to Verstappen’s left-hand side.
But the race was quickly neutralised again as Mick Schumacher became the second Haas rookie to have an incident all by himself as he spun exiting Turn 4 on the safety car restart lap, while just ahead Pierre Gasly clipped Daniel Ricciardo’s left rear and lost his front wing, and Carlos Sainz and Lance Stroll clashed at the final apex of the double Turns 9/10 complex.
Clearing up after the various incidents was covered by the virtual safety car, which ended as the leaders approached the Turn 8 hairpin on lap five – meaning Verstappen did not have to worry about a third Turn 1 defence.
But a suspected differential problem was causing the Red Bull driver issues as he had reported a strange feeling when applying throttle, which caused Mercedes to instruct Bottas that the lead was “all to play for” once he’d battled by Leclerc using DRS into Turn 1 on lap six.
The problem did not appear to be causing Verstappen any further issue during the next phase of the race, as he and Hamilton extended their gap over Bottas with a string of laps in the low 1m36s, with the second Mercedes a chunk further back each time.
The gap at the front stabilised approaching the two-second mark, with Verstappen looking in control.
But on lap 13 Mercedes opted to bring Hamilton in for an unexpectedly early stop – just two laps after Fernando Alonso had become the first soft tyre runner to come – and switch his mediums for hards.
Hamilton’s pace on new rubber was so strong that it was quickly apparent than a like-for-like strategy would mean Verstappen losing out in any case, so Red Bull kept him out until lap 17, when he came in to take another set of mediums – a lap after Bottas had taken hards.
Hamilton’s lead when Verstappen emerged from the pits was just over seven seconds, but the Red Bull driver quickly began to erode that advantage.
A series of laps in the 1m34s vs Hamilton touring in the mid 1m35s meant Verstappen had nearly halved the Mercedes driver’s lead by lap lap 24, before the gap stabilised for a time.
But Verstappen was able to get back into the 1m34s and again began to home in on Hamilton, getting to withing two seconds on lap 28, at the end of which Mercedes brought Hamilton in for another set of new hards, wary of a Red Bull undercut.
Verstappen therefore retook the lead and stayed out on his mediums until the end of lap 39, with Hamilton steadily having cut his lead at the front to just under 16 seconds.
The result was Verstappen facing an 8.8s deficit as he emerged from the pits, but with 10-lap fresher rubber, which he quickly used to eat into Hamilton’s lead once again – setting a fastest lap at 1m33.228s on his first full lap out of the pits versus Hamilton’s 1m34.334s.
After quickly cutting the gap with several more laps in the mid 1m33s, Verstappen’s chase slowed a touch – although he continued to reduce Hamilton’s advantage as they negotiated lapping traffic by around half a second a lap each time.
Verstappen eventually got withing DRS range with five laps to go, using it to set up his briefly successful Turn 4 pass.
After giving back the lead, Verstappen appeared to make a significant slide into Turn 13 approaching the end of lap 53 and he struggled to close back up quickly to the rear of the Mercedes, eventually running out of time.
Bottas finished 37.3s adrift of Hamilton in third after a slow second stop had dropped him 10s further from the leaders, and took a late extra stop to successfully chase the fastest lap bonus point on the final tour.
Lando Norris finished fourth having battled by Leclerc shortly after the Ferrari driver had been passed by Bottas in the early stages, and he was followed home by the charging Perez, who recovered from his formation lap issues to take fifth on a three-stop strategy.
Leclerc came home fifth ahead of Daniel Ricciardo and new teammate Sainz, with Yuki Tsunoda beating Lance Stroll to ninth at the end of the top 10.
Sebastian Vettel was classified 15th after being hit with a penalty for colliding with the rear of Esteban Ocon’s Alpine late in the race. Ocon eventually finished 13th.
Gasly and Nicholas Latifi retired in the pits late on, while Alonso was the other retirement after suffering a suspected rear brake problem in the middle part of the race.