The Van Amersfoort Racing driver started on reverse grid pole at the Italian circuit and led from the off, holding off an initial challenge from MP Motorsport's Caio Collet.
But it was Bearman who he needed to worry about, the Prema driver starting seventh before cutting through the field, including a stunning move past both Collet and Jonny Edgar at Turn 1 to take second.
He came within 0.4s of Colapinto but was unable to make the final move for the lead, telling his team on the radio he "thought he had one more lap."
Collet finished third, with title contender Zane Maloney in fourth for Trident.
The nine points mean Bearman moves up to third in the standings with just one race remaining, while championship leader Victor Martins took just one point for finishing 10th.
Isack Hadjar, who sits second in the standings, failed to score after being forced to pit with wing damage.
The formation lap had a bizarre start, as David Vidales was left on the grid by his Campos Racing team still holding his umbrella, resulting in him being pushed back to the pitlane to start from there.
Martins, who started in ninth for ART, was about to make a move on Prema's Arthur Leclerc at Lesmos when the pair made contact, forcing Martins across the gravel and dropping him to 27th, with Leclerc falling to 13th.
The yellow flags were waved briefly as Alexander Smolyar went off at Turn 5 and into the barrier, though he got going again, bringing a large amount of gravel onto the track.
Colapinto maintained his lead from Collet and Pepe Marti into lap two, while further back Bearman passed teammate Jak Crawford for sixth on the start-finish straight, before also passing Jenzer's William Alatalo for fifth place.
The safety car was deployed on lap four as Carlin's Zak O'Sullivan hit the wall at Turn 1 having locked up.
Racing resumed on lap nine, with the pack having been bunched up before Colapinto released them late.
A tussle ensued for second, with Collet emerging in front as Marti went wide at Turn 2, while Kaylen Frederick and Leclerc made contact at Turn 4.
Hadjar was forced to pit the following lap, having made contact with Smolyar and received front wing damage.
Bearman snatched fourth from Marti at Turn 2 on lap 10, the latter falling back down the order as he touched the gravel at Lesmo 2.
Despite Crawford briefly passing Bearman at Turn 1, the Ferrari junior retook the position soon after and closed in on Edgar for third.
Bearman then made a dramatic move on Collet and Edgar along the straight, cutting ahead into Turn 1 and embarking on his charge towards Colapinto.
Further back, Leclerc made up two positions, battling Roman Stanek (Trident) for ninth before finding his way up to eighth.
Bearman was within DRS of Colapinto by the penultimate lap, while Collet made it past Edgar for third, the latter also falling behind Zane Maloney to fifth.
Gregoire Saucy took sixth for ART, with Prema teammates Crawford and Leclerc in seventh and eighth.
Marti and Martins rounded off the top 10, with Hadjar finishing last in a dent to his title hopes.
The final F3 race of the year takes place tomorrow at 7.35am BST.