Mercedes’ George Russell passed polewinner and early leader Piastri soon after a restart on lap three, but Russell’s pace on softer tyres fell away as the sprint entered its second half and Piastri repassed him to lead once more.
After a poor start on mediums, Verstappen surged up to third – although his progress was hampered by no less than three safety car interventions.
In the final five-lap dash to the finish, Verstappen passed Russell but could do nothing about Piastri, who scored his first F1 victory.
Piastri led from his first ever F1 pole on medium tyres, ahead of the soft-shod Russell and the Ferraris of Carlos Sainz and Charles Leclerc – who all gained huge advantages away from the startline. Verstappen fell to sixth by the first corner but jumped ahead of Lando Norris (McLaren) at Turn 2, who slumped from the front row down to sixth.
The race immediately required a safety car, when Liam Lawson (AlphaTauri) spun off all by himself, and restarted on lap three. Moments after it went green again, Russell grabbed the lead from Piastri at Turn 6 with an aggressive lunge.
Further back, Alpine’s Esteban Ocon snatched seventh from Fernando Alonso’s Aston Martin, after the Spaniard lost momentum trying to pass the struggling Norris.
A second safety car was needed when Logan Sargeant spun his Williams into the gravel on lap four.
At the restart on lap seven, Russell caught Piastri napping to lead by 1.5s, as Sainz attacked at Turn 1. Alonso repassed Ocon in the battle for seventh.
Verstappen DRS-ed past Leclerc for fourth on lap nine and did likewise on Sainz a lap later.
Russell’s pace suddenly fell away, allowing Piastri to power past him on the start/finish straight on lap 10. Behind them, Norris passed Leclerc around the outside of Turn 1 for fifth.
A three-wide moment between Ocon, Nico Hulkenberg (Haas) and Sergio Perez (Red Bull) ended with all three colliding, sending Ocon and Perez into the gravel and all were out of the race. It meant a third safety car intervention.
The race restarted with a five-lap dash to the finish, with Leclerc repassing Norris into Turn 1. Piastri extended a 1s gap over Russell, who had Verstappen right on his tail. Verstappen took second at Turn 1 on the next tour and set off after Piastri, who now had a 2.4s lead.
Norris passed Leclerc again, as well as Sainz, to grab fourth on the following lap.
Verstappen was only able to take a couple of tenths out of Piastri in the closing stages, and was forced to settle for second, while Norris passed Russell on the final lap for third.
The second Mercedes of Lewis Hamilton charged up to fifth, as Sainz and Leclerc fell back to sixth and seventh respectively.
After a 10-minute practice session for familiarisation, as the FIA changed the track layout overnight at Turns 12/13 following issues raised by Pirelli about sidewall separation, Piastri set pole position.
Russell set the fastest time of 1m25.413s on the mandated medium tyres.
Falling at the first hurdle were Lance Stroll (Aston Martin), Alex Albon (Williams), Yuki Tsunoda (AlphaTauri, after his quickest lap was deleted for exceeding track limits), Kevin Magnussen (Haas) and Logan Sargeant (Williams).
Norris set the quickest time of 1m24.947s, again on mandated mediums.
Knocked out at this point were track limits victims Pierre Gasly (Alpine) and Lewis Hamilton (Mercedes), along with Valtteri Bottas (Alfa Romeo), Liam Lawson (AlphaTauri) and Zhou Guanyu (Alfa Romeo).
After his first effort was deleted due to track limits, Verstappen could only manage third on his measured final run.
That resulted in a McLaren 1-2, and Piastri beat Norris to score his first F1 pole with 1m24.454s on his final run as Norris ran off course at the final corner.
George Russell was fourth quickest for Mercedes, ahead of Fernando Alonso (Aston), the Ferraris of Sainz and Leclerc, Nico Hulkenberg (Haas), Sergio Perez (Red Bull) and Esteban Ocon (Alpine).