ART driver Vandoorne led away from pole position and extended a 1.6s lead by the end of the opening lap.
But Campos Racing's Pic kept the Belgian in sight until they took their mandatory pitstops on lap 13.
Pic rejoined 3.6s back, and then reeled Vandoorne back in towards the end of the race.
Vandoorne: I had to dominate GP2
He got to within 0.6s on a couple of occasions, including across the finish line on the last lap, but Vandoorne was always able to repel his advances for his first feature race win since the season opener in Bahrain.
"Today was a good day," Vandoorne said. "I had to push until the end, as I could see the gap was getting closer and closer, and Arthur didn't give me a lot of breathing space."
The win meant Vandoorne consolidated his third position in the championship, as fourth placed Johnny Cecotto Jr only scored a solitary point.
Mitch Evans finished a distant third for Russian Time, ahead of Stephane Richelmi of DAMS.
Andre Negrao benefited from an early pitstop to vault up to fifth, but only after Daniel Abt crashed out following contact with Julian Leal at Lesmo 2.
Title contender Felipe Nasr was a lacklustre sixth, but the star of the race was points leader Jolyon Palmer, who stormed from last place (after he failed to provide enough fuel for a sample after qualifying) to finish eighth. That means he starts Sunday's reversed-grid sprint race from pole position.
Palmer still leads by 30 points, losing just two to Nasr. They will start nose-to-tail on the grid on Sunday morning.
Results - 30 laps:
Vandoorne seals GP2 title in Russia
Rossi wins after Lynn crashes out