With the Flames leading 2-1 halfway through the second period, Calgary had the chance to take a stranglehold on a two-man advantage for nearly 90 seconds. But the Oilers penalty killers held the Flames to a couple of harmless shots from the perimeter, and the game changed shortly after.
Ryan Nugent-Hopkins tied the game with a short-handed goal, another momentum-shifting moment from the penalty kill, before Joakim Nygard scored the eventual winner before the second period expired.
Zack Kassian, Leon Draisaitl and Sam Gagner added insurance goals in the third.
The Flames (2-1-1) swapped goalies halfway through the game. David Rittich stopped seven of eight shots. Jon Gillies, who has played 12 career NHL regular-season games with the Flames, surrendered five goals on 21 shots, two of them on the short side.
The Oilers (2-2-0) got on the board just 2:44 into the first period, as Alex Chiasson, who enjoyed a breakout season in 2018-19 with a 22-goal campaign, redirected a point shot from defenceman Adam Larsson.
But the Flames drew level at 7:01, on their first real chance of the game. Michael Stone’s low shot rebounded off the pads of Oilers netminder Mikko Koskinen, with the puck going right onto the tape of Sam Bennett’s stick. He had no trouble firing the puck home.
Ryan Lomberg gave the Flames the lead as he snapped home a perfect pass from Zac Rinaldo on a 2-on-1 break at the 13:30 mark.
But Gillies gave up a goal on the third shot he faced. Nugent-Hopkins’ initial pass on a 2-on-1 break was broken up, and it looked like the play was over. But the puck hung around in the slot and Nugent-Hopkins swatted the puck over Gillies’ shoulder.
Nygard was credited with the goal that gave the Oilers a 3-2 lead at 17:09 after a Gillies couldn’t corral a short-side shot from Darnell Nurse.
Kassian scored on the power play at 4:26 of the third, with a seeing-eye shot that seemed to go right through the Flames’ netminder, and Draisaitl scored at 10:10 in his first game of the pre-season.
Gagner’s deflected goal added insult to injury with four seconds left.
Koskinen made 19 saves.
NOTES: The Oilers were set to fly to Kelowna, B.C. after the game for a team-bonding weekend. After playing four pre-season games over the course of five days this week, the Oilers don’t play again until Tuesday night, when they host the Arizona Coyotes…. The Oilers cut their roster to 33 before the game; they included defencemen Caleb Jones and Ethan Bear, plus winger Tyler Bensonâ€¦ Defenceman Brandon Davidson, who is trying to crack the Flames lineup, played Friday. He’s played 114 career games for the Oilers.