Joe Sakic set up the winner and added a goal of his own to reach the 1,600-point plateau in front of 19,289 fans at the Pengrowth Saddledome. He's scored 100 of those points (40-60) against the Flames.
Marek Svatos also scored for the Avalanche (6-4-0), while goalie Jose Theodore stopped 39 of the 41 shots he faced.
Alex Tanguay and Matthew Lombardi scored for the Flames (5-4-2), who are now 3-2-0 on their current seven-game homestand.
Celebrating his 31st birthday, Calgary goalie Miikka Kiprusoff made 19 saves in a losing effort.
The Avalanche opened the scoring when Sakic converted a feed from Wojtek Wolski at 7:27 of the first period.
A short time later, Tanguay snuck behind the Avalanche defence but was thwarted by Theodore on his breakaway attempt.
Tanguay wouldn't be denied on his next try. He took a pass from Daymond Langkow and snapped a quick shot to the top corner to tie the game.
The Flames took a 2-1 lead in the second on a goal by Matthew Lombardi, who stripped Avalanche defenceman Jeff Finger before snapping a quick shot past Theodore.
After two periods the Flames had a 27-13 advantage in shots and could have been up by more than a goal if not for some great saves made by Theodore, who robbed Langkow with a great glove grab before turning aside a pair of quality scoring chances from Craig Conroy.
Early in the third, the Flames had a glorious opportunity to pull ahead thanks to an extended two-man advantage during which Tanguay appeared to score his second of the game. Tanguay's shot squeaked through Theodore's pads and just across the goal line, but referee Michael McGeough immediately blew the whistle to signify he lost sight of the puck.
Just as a high-sticking penalty to Tanguay was about to expire, the Avs tied the game with 4:15 left to go in the third when Svatos backhanded a rebound past Kiprusoff.
Notes: Colorado coach Joel Quenneville collected his 400th career NHL victory. . . . Avalanche defenceman Jordan Leopold will be sidelined for about two months due to wrist surgery. . . . Forward Milan Hejduk missed the game with a back injury.