Hamilton hit the front for Mercedes during the early running when he was on medium-compound Pirellis, setting a best time of 1m39.991s.
Verstappen, on hards, was second quickest for Red Bull during this phase of the 90-minute session but seven tenths slower than Hamilton.
As usual, the 20 cars then switched to soft rubber for their qualifying simulation runs.
Alex Albon, in the second Red Bull, was the first to hit the top of the timesheets with a time of 1m39.943s, only to be relegated to second shortly afterwards by Verstappen.
Hamilton then took first place with a lap of 1m38.773s, which stood as the fastest of the session.
Both drivers attempted to improve but were unable to do so on subsequent attempts, with Verstappen making it clear over the radio that he felt he could do better as his best lap was “compromised” in the final sector.
Vettel climbed to third fastest with his final qualifying simulation lap after being frustrated by traffic on his early attempts – notably by Haas driver Kevin Magnussen who he described as “sleeping” – but was still six-tenths slower than Verstappen.
Valtteri Bottas recovered from his FP1 crash with fourth fastest, but was 1.121s off his pacesetting teammate.
Charles Leclerc, who lost most of FP1 to a gearbox failure, ended up sixth fastest after also being frustrated by traffic.
He was just half-a-tenth faster than Albon, who ended the session in fourth place after a difficult session during which he had an early trip up the Turn 7 escape road before crunching his front wing into the barriers at Turn 10.
The Ferrari drivers were frustrated by traffic early in their qualifying simulation runs, with Sebastian Vettel suggesting Kevin Magnussen was “sleeping” after the Haas driver got in his way.
But they eventually did complete push laps, with Leclerc, who lost most of FP1 to a gearbox failure, just 0.111s quicker than Vettel as the pair secured fifth and sixth.
Lando Norris took ninth for McLaren, lapping two tenths slower than Sainz, with Toro Rosso driver Pierre Gasly rounding out the top 10.
Racing Point’s Sergio Perez was 13th, 2.10s off the pace, but angered Magnussen during the qualifying simulation runs when he drifted to his right while the Haas driver was attempting to pass him on that side. The stewards will investigate the incident after the session.
Alfa Romeo driver Antonio Giovinazzi was classified 14th ahead of Racing Point’s Lance Stroll.
The pair set identical lap times – 1m41.128s – but Giovinazzi was placed ahead as he had set his time earlier in the session.
Kimi Raikkonen was 16th in the other Alfa Romeo, losing out to his teammate in the first and third sectors of the lap.
George Russell was 18th having been as high as sixth thanks to being the first driver to complete a qualifying simulation lap, with Kubica last after lapping 0.732s off his teammate.