Vancouver was playing on back-to-back nights.
Daniel Sedin's shot deflected off Flyers defenseman Luke Schenn and barely squirted into the net with 2:48 left in regulation to put the Canucks ahead, 3-2.
The Flyers allowed a season-high 44 shots, and they managed just 27 shots themselves.
Mason made three excellent saves in the first six minutes of the third period, keeping the game tied at 2-2.
Mason stopped Daniel Sedin on a breakaway, stoned Ryan Kesler out front, and made a kick save on David Booth as he tried to finish a two on one.
The Flyers were badly outplayed in the second period and appeared they would be facing a deficit heading into the final 20 minutes of regulation.
But Claude Giroux, on arguably his best goal of the season, tied it at 2-2 by scoring on a breakaway with 1:08 remaining in the second.
Taking a long pass from Michael Raffl, Giroux had two Canucks on his back, but he somehow put a shot through the legs of goalie Eddie Lack.
"I don't remember much besides going to the net and trying to put the puck on net," said Giroux, who has 17 points (six goals, 11 assists) during his nine-game points streak.
Raffl had assists on each of the Flyers' first two goals.
"Me and Jake [Voracek] played together last year and now for 'Raff' to come in, new in the league, new on the team with new teammates, it's never easy," Giroux said. "But he's been doing a great job for us."
Vancouver, which had gone 10-1-1 in its previous 12 games, had taken a 2-1 lead thanks to second-period goals by former Flyer Tom Sestito and Jannik Hansen.
Despite being outshot by a 13-7 first-period margin, the Flyers left the ice with a 1-0 lead at the end of the period thanks to Mark Streit's fourth goal.