Sam Bennett and Shea Theodore scored for Canada, and Jordan Binnington made 15 saves.
Connor McDavid, who was serving as captain, had two assists. Canada captain Sidney Crosby did not play because of a lower-body injury sustained in the win against Czechia.
Sebatian Aho and Erik Haula scored for Finland, the No. 4 seed, which will play for bronze here Saturday (2:40 p.m. ET; Peacock, USA, ICI Tele, CBC Gem, CBC [JIP]). Juuse Saros made 36 saves.
Theodore tied the game 2-2 at 10:34 of the third with a rising slapper through traffic.
Reinhart made it 2-1 with a power-play goal at 14:20 of the second. Defenseman Cale Makar walked the blue line before flicking a wrist shot into traffic. Reinhart deflected it with his stick, causing the puck to change direction and skirt past Saros.