Poleman Palmer was outsprinted off the start by Mitch Evans, who had gambled on the super-soft tyre.
He spent the first 10 laps chasing the Kiwi, briefly interrupted by a safety car to retrieve Facu Ragalia's Hilmer car, which broke down on lap one.
As Evans's tyres went off, Palmer pounced at Sainte Devote at the start of lap 11, and pulled well clear as Evans fell back into the clutches of Palmer's DAMS team-mate Stephane Richelmi.
Vandoorne: I had to dominate GP2
The race required a red flag after 12 laps when Rene Binder hit his Arden team-mate Andre Negrao into a spin at Loews. With Artem Markelov getting stranded on the apex, the track was blocked.
Even after the red flags flew, there was drama as a number of cars had overheated while queuing and lapsed into safe mode. Third placed Richelmi was affected, as was 10th-placed Alexander Rossi, but all were able to resume after push-starts.
Following a restart behind the safety car, and after a huge delay to sort out the race order, Palmer pulled away from Evans, who had changed onto soft tyres during the stoppage.
Another safety car was required on lap 25, when Julian Leal's attempted pass on Raffaele Marciello ended with Leal in the tyre wall at the Nouvelle Chicane.
All the frontrunners, bar ART's Stoffel Vandoorne, took the opportunity to pit. As he left the pits, Palmer appeared to clip his team-mate Richelmi's wheel, which bounced across the pitlane and almost hit Johnny Cecotto Jr's car.
Vandoorne led at the restart, but when he made his mandatory pitstop on lap 32, dropping to 14th, Palmer held a 3.7-second lead.
However, now on super-soft tyres, Palmer did not have his previous pace on softs. Evans and close pursuer Felipe Nasr - who started 18th but stopped early - closed the gap relentlessly in the closing laps, but fell just short, all three within 0.6s at the finish.
"A difficult race, so much chaos, but I was able to win it," summed up Palmer.
Evans added: "The red flags turned everything upside down. I was closing at the end there, but Jolyon has been flawless all weekend and deserves it."
Stefano Coletti was on course for at least second place, after pulling stunning passes on Nasr and Evans at Anthony Noghes corner, but when he tried the same move on an out-of-position Simon Trummer, in an attempt to catch Palmer, Trummer turned in and took them both out.
Cecotto finished fourth, ahead of Trident team-mate Sergio Canamasas (who was a lap down before the red flag), Arthur Pic, Rio Haryanto and Richelmi, who will start Saturday's sprint race from pole after being delayed in the pits by Palmer.
Vandoorne seals GP2 title in Russia
Rossi wins after Lynn crashes out