Just 15 riders - from a 32-strong field - made it to the finish as extreme wet and cold conditions contributed to almost endless drama throughout the 24-lap contest.
Germany FTR-Honda's Rossi had not even been a feature for the podium in the opening half of the race, but events took a dramatic turn 12 laps from the end when long-term leader Hector Faubel (Aspar) and Jakub Kornfeil (Ongetta) in third fell in quick succession.
One lap later and Luis Salom (RW Kalex-KTM) crashed out from fourth, promoting Miguel Oliveira (Monlau Honda), Maverick Vinales (Avintia FTR-Honda) and Rossi into the top three.
Oliveira, who had been riding on Faubel's tail when the latter fell, initially began to stretch away but nine laps from the finish he too crashed, losing the front at the final corner.
Vinales therefore inherited the provisional lead of both the race and the championship, but it lasted all of one lap as he high-sided at exactly the same turn.
Rossi, to the delight of the crowd, therefore moved into a 22s lead which he gradually extended across the remaining distance - allowing him to back off completely in the final lap and cruise to the finish line, to the adulation of the soaked grandstands.
The drama was not complete however; championship leader Sandro Cortese (Ajo KTM), who had spent much of the early laps down in ninth and was facing a heavy points loss to main rival Vinales, fell from second three laps from the finish. He was able to keep the bike going and eventually finished sixth - extending his points lead more by default than by design.
Alberto Moncayo saved something for his Aspar squad after team-mate Faubel's crash by finishing second, ahead of 16-year-old Alex Rins (Monlau Honda). All three podium men therefore achieved career-best finishes.
Gresini's Niccolo Antonelli saved a last-lap crash to take fourth ahead of Arthur Sissis (Ajo KTM) and Cortese.