The result marked Marquez's first win since Estoril in early May, and was earned via a late charge to close down the big lead that Iannone had opened up mid-race.
Technomag-CIP rider Dominique Aegerter had jumped from fifth to the lead at the start, but soon had Espargaro's Pons Kalex on his tail. The Spaniard made it into the lead into the chicane at the end of the opening lap and then pushed to try and pull away while Marquez (Monlau Suter) was still battling clear of the rest of the lead pack, only to crash out. Espargaro was upset but unhurt, while his bike was wrecked as it tumbled through the gravel.
Fellow championship contender Luthi was already out, his Paddock Suter tangling with Ratthapark Wilairot's Gresini example at the first corner.
Marquez kept a low profile in the first half of the race, and it was Iannone (Speed Master) who broke away while the points leader quietly diced with Aegerter and Marc VDS' Scott Redding.
Iannone's lead got as large as three seconds, but it would not last. Entering the closing stages, Marquez lifted his pace and demolished Iannone's advantage.
They were absolutely together with three laps to go. Although Iannone was twice able to repass Marquez after losing the lead, he could not hang on indefinitely and the Spaniard finally grabbed first place for good on the final lap.
Redding overcame a strong challenge from Pons rider Esteve Rabat to claim his second straight podium, with Forward's Alex de Angelis - now on an FTR chassis - and Tech 3's Bradley Smith on their tail.
Aegerter faded to seventh, as eighth-placed JIR rider Johann Zarco recovered from his qualifying crash to lead home former champion Toni Elias (Aspar), Redding's team-mate Mika Kallio and second-row starter Randy Krummenacher (Team Switzerland).