The race featured two three-car incidents at Turn 2, the first of which occurring on the opening lap with Tatiana Calderon outbraking herself on the inside and collecting Swiss duo Ralph Boschung and Louis Deletraz.
Sean Gelael made a superb start, squeezing past between front row starters Nikita Mazepin and Juan Manuel Correa, and headed the order when the safety car was first called.
On the restart, Gelael was able to pull away as Correa and Latifi fought for second, the latter assuming the position.
The DAMS driver rapidly closed in on Gelael's Prema car and made a move for the lead as the latter started slipping down the order to sixth.
Latifi had built a lead of 3.7s when the safety car was called again due to Giuliano Alesi crashing at Turn 3 while attempting an overambitious move on Guan Yu Zhou.
Correa outbraked himself into the first corner on the restart but miraculously managed to both avoid the wall and also keep second from Jack Aitken, who then tried to make a move on the outside of Turn 2.
His attempt did not pay off, but it caught Luca Ghiotto out behind him, the Italian clipping Aitken's rear tyre and hitting the wall with Jordan King and Nikita Mazepin piling in behind him.
A lengthy third caution period followed and just a few seconds were left on the race timer when action finally resumed for two more laps.
Latifi nailed the restart and had a trouble-free run to the chequered flag, the Canadian scoring his second victory of the season.
Sauber Junior Team driver Correa took a maiden F2 podium in second with Saturday winner Aitken salvaging third - the Campos driver was overtaken by Nyck de Vries (ART) just before the final safety car was deployed, but the Renault junior slipstreamed past the Dutchman on the final lap.
De Vries settled for fourth ahead of Mick Schumacher, who made a strong recovery from 19th on the grid, finishing off with an aggressive move on Prema teammate Gelael on the last lap.
Gelael lost two more places and finished only eighth, behind Sergio Sette Camara (DAMS) and Dorian Boccolacci (Campos).
The top 10 was completed by Callum Ilott (Sauber) and Zhou (Virtuosi).
|1||6|| Nicholas Latifi ||DAMS|
|2||12|| Juan Manuel Correa ||Charouz Racing System||0.961|
|3||15|| Jack Aitken ||Campos Racing||1.521|
|4||4|| Nyck de Vries ||ART Grand Prix||2.602|
|5||9|| Mick Schumacher ||Prema Powerteam||3.247|
|6||5|| Sergio Sette Camara ||DAMS||4.060|
|7||14|| Dorian Boccolacci ||Campos Racing||6.503|
|8||10|| Sean Gelael ||Prema Powerteam||7.724|
|9||11|| Callum Ilott ||Charouz Racing System||7.729|
|10||7|| Guanyu Zhou ||UNI-Virtuosi||9.293|
|11||19|| Anthoine Hubert ||Arden International||11.074|
|12||2|| Nobuharu Matsushita ||Carlin||11.235|
|13||17|| Mahaveer Raghunathan ||MP Motorsport||22.584|
|3|| Nikita Mazepin ||ART Grand Prix||7 Laps|
|8|| Luca Ghiotto ||UNI-Virtuosi||7 Laps|
|16|| Jordan King ||MP Motorsport||7 Laps|
|20|| Giuliano Alesi ||Trident||11 Laps|
|18|| Tatiana Calderon ||Arden International||19 Laps|
|21|| Ralph Boschung ||Trident||19 Laps|
|1|| Louis Deletraz ||Carlin||19 Laps|
|View full results|