Rapax driver Coletti stormed into the lead from fifth on the grid, but did it the hard way - banging wheels with poleman Johnny Cecotto Jr's Arden car at Turn 1.
They ran side by side all the way through Turns 2 and 3, before Coletti finally pulled clear, with Cecotto bearing the scars of the contact on his left-hand sidepod.
Coletti pulled out a 4.8-second lead by lap 16, but feature race winner Robin Frijns would take the fight to him for Hilmer in the closing stages.
The gap between them closed dramatically in the final stages, but Coletti had his tyre management under control, and he finished just 0.6s ahead as Frijns charged to the finish.
The opening lap was a wild affair, as Carlin's Felipe Nasr pulled moves on Alexander Rossi and Frijns through Turns 4 and 5 respectively, but Frijns got him back by Turn 7.
Both Frijns and Nasr passed Cecotto when the Venezuelan ran wide at Turn 9, and he fell to fourth.
Jolyon Palmer was up to fifth from 10th on the grid after his penalty from Saturday, ahead of Kevin Ceccon and the delayed Rossi.
After a stagnant middle phase of the race, it all kicked off near the end. Palmer passed Cecotto for fourth, with slight contact, at Turn 5 with five laps remaining.
The star of the race proved to be Sergio Canamasas, who rocketed from 23rd to challenge Cecotto for fifth.
Having nosed inside him at Turn 12, Cecotto whacked Canamasas on the exit. The concertina effect that resulted in the queue of cars behind ended in a big mess, as Rio Haryanto went over the back of Canamasas at Turn 14.
Even without a rear wing, Canamasas still managed to limp home 14th.
Cecotto held fifth, but will be called to the stewards room to explain his driving tactics, with Rossi surviving the mayhem to finish sixth ahead of Ceccon, Daniel Abt and Fabio Leimer.
Coletti now leads the series by 17 points from Nasr. Leimer failed to score a point all weekend and drops to third, with Frijns leaping up to fourth but unsure of his participation in the rest of the season.