Vinales struggled from pole position in the first race at Misano last week due to an incorrect tire choice, but a set-up change in practice meant that he was significantly stronger from the start on Sunday.
On the first lap, the Yamaha rider took the lead from Jack Miller’s fast-starting Pramac Ducati at Turn 4 and opened up for half a second.
Miller’s hopes for a podium quickly faded and he would end the race on lap eight with an engine problem.
Bagnaia on the Pramac sister motorcycle was the rider who led the chase at Vinales on lap two, with the Italian finding a way around turn 4 on lap six when the Yamaha rider ran far.
With the power of the Ducati and the grip of its soft rear tire, Bagnaia built a lead of over seven tenths, which a few laps later grew to over a second.
Beyond that, chaos erupted when KTM’s Brad Binder crashed into the Carro hairpin at Turn 14 of Tour 2, having just advanced to the podium. A few moments earlier, Valentino Rossi (Yamaha) slipped out of the top eight at Turn 4 and would eventually get out.
At the top, Bagnaia’s gap remained stable between 1.4 and 1.6, with Vinales comfortably managing the gap to pursuing Pol Espargaro on the KTM and Petronas Yamaha man Fabio Quartararo.
Even though the gap had dropped to 1.1s at the start of lap 21, Bagnaia still looked like he was in control until he crashed on the left-hand turn of Turn 6.
This put Vinales in a sovereign leadership that he would not give up until the checkered flag to become the sixth different winner in 2020 and jump straight back into the championship fight.
The battle for second place raged on the final laps as Espargaro’s soft rear tire began to fade and Quartararo chased him home.
Suzuki’s Joan Mir joined the pair after starting from 11th on the grid and combing the inside of Quartararo for third on lap 23 at turn 1, before stealing second place from Espargaro on the following lap at turn 4.
Quartararo followed him into Turn 4, but was penalized for long laps on the final lap for exceeding the track limit too often.
The Petronas driver missed the penalty loop and was given a three-second time penalty at the checkered flag, dropping him to fourth place and lifting Espargaro to the podium.
Miguel Oliveira finished 15th on his Tech 3 KTM and completed the top 5 ahead of Takaaki Nakagami from LCR Honda and Alex Marquez, who finished seventh with his best result of the year on the factory Honda.
Andrea Dovizioso is only one point ahead of Quartararo in the overall standings, having finished eighth, just four points ahead of works Ducati riders Quartararo, Vinales and Mir.
San Marino GP winner Franco Morbidelli recovered from early contact after Aleix Espargaro crashed into him and finished ninth. Danilo Petrucci (Ducati), Avintias Johann Zarco, Alex Rins (Suzuki) and Aprilias Bradley Smith got the last points.
Tech 3’s Iker Lecuona crashed from sixth in the final stages, with Avintia’s Tito Rabat also crashing and standing on the sidelines alongside Rossi, Bagnaia, Miller, Binder and Aleix Espargaro.