Chris Stewart produced a hat trick for the Avalanche, running his goal total to seven, but he did not figure in the scoring during a dramatic third period that saw Colorado rally to take the lead, fall back into a tie and then win it on Winnik's goal.
Colorado snapped a three-game losing streak and did so despite a rough night for Peter Budaj, who will be the team's No. 1 goalie for an indefinite period due to an injury suffered by Craig Anderson.
The Flames had a 4-3 lead heading into the final period, but the Avalanche moved in front on goals by Brandon Yip and T.J. Galiardi.
Alex Tanguay scored with 5:35 to go to tie it before Winnik rifled a shot past Henrik Karlsson.
Karlsson, who won in his NHL debut last Friday, allowed six goals on 36 shots.
Stewart's hat trick was the second of his career. He scored Colorado's first three goals, the last two coming 29 seconds apart late in the second period to bring about a 3-3 tie.