Racing Engineering driver Marciello ran third in the early going, as the race was interrupted by a heavy rainstorm that briefly halted the event after three laps.
At the restart, leader Vandoorne (ART) briefly lost top spot to Trident's Johnny Cecotto Jr at La Source, but the latter then straightlined Les Combes moments later, and didn't back off enough and was ordered to let Vandoorne past again, a call he later questioned.
Marciello passed Cecotto for second around the outside of Les Combes on lap nine, but was 4.6s behind Vandoorne when the leader took his mandatory pitstop.
Vandoorne: I had to dominate GP2
Marciello stayed out two laps longer, and rejoined within 2s of Vandoorne.
He closed the gap and they entered the last four laps nose-to-tail.
Marciello attacked numerous times, despite going off briefly at Les Combes, and finally got the job done at Rivage with two laps to go.
He went on to win by 2s from Vandoorne, with Cecotto 33s in arrears in third.
"It was a really hard race, and I'm really happy to win," said Marciello. "After the pitstop I had more grip, I was faster through Eau Rouge, and that helped a lot."
Carlin's Felipe Nasr finished fourth from 11th on the grid after an aggressive opening few laps, during which he passed title rival Jolyon Palmer's DAMS car.
Russian Time's Mitch Evans took fifth, and was lucky that the race was red-flagged as his car lapsed into safety mode under the safety car, which cost him his early second place.
Palmer finished sixth, equalling his second-worst finish of the season, ahead of a charging Artem Markelov and Daniel Abt, the latter grabbing reversed-grid pole for Sunday's race at the start of the final lap from Andre Negrao.
Vandoorne seals GP2 title in Russia
Rossi wins after Lynn crashes out