The substitute's deflected effort booked a quarter-final with Australia on Friday at the Olympics.
Adriana Leon's second-half opener looked to have earned Canada top spot before Weir, who had already hit the bar and post, struck.
Boss Hege Riise rested three-goal Ellen White and made five changes, including starting Jill Scott and Rachel Daly, with Chelsea forward Fran Kirby on the bench for the first time after shaking off injury.
Needing to win to top the group, Canada had the first chance but Evelyne Viens dragged wide.
Georgia Stanway had a shot blocked before Team GB gained the upper hand and should have opened the scoring after 33 minutes.
Scott teed up Daly but the Houston Dash forward was denied by Ashley Lawrence's last-gasp block.
But GB started the second half sloppily and Ellie Roebuck had already survived a scare after wasting possession before Canada took the lead 11 minutes after the break.
Lawrence burst down the left to find space and cut the ball back for Leon to fire in high from 12 yards.
White and Kim Little replaced Scott and Daly in response and Little almost provided Weir with an equaliser with 21 minutes left.
She fed Weir and her shot from an angle hit the underside of the bar and then the far post before somehow bouncing away.
The introduction of White and Little had reinvigorated Great Britain and Stanway then shot over.
But with time running out Team GB levelled with five minutes left when Weir's 25-yard strike deflected off Nichelle Prince to wrongfoot Stephanie Labbe in the Canada goal.