Garnett spent his junior career with the Red Deer Rebels and his hometown Saskatoon Blades of the Western Hockey League (WHL). He was named to the WHL All-Rookie Team for the 2000–01 season and was drafted by the Thrashers in the summer of 2001.
Garnett made his professional debut in the 2002–03 season playing for the Greenville Grrrowl of the East Coast Hockey League. Over two seasons with the Grrrowl and the Gwinnett Gladiators he posted a 37-25 record before securing a full-time job with the Thrashers top minor league affiliate, the Chicago Wolves of the American Hockey League (AHL). In total, Garnett appeared in 116 games for the Wolves, posting a 56-40-5 record.
Garnett was called up to the Thrashers early in the 2005–06 season due to a groin injury sustained by Thrashers starting goaltender Kari Lehtonen. Garnett made his NHL debut on October 12, 2005, when he replaced Mike Dunham, who suffered a groin injury less than ten minutes into a game against the Montreal Canadiens. The Thrashers lost the game 2-0, though Garnett stopped 29 of the 30 shots he faced and was named the game's second star. That season Garnett appeared in 24 games for Atlanta, including a franchise record 17 straight games from November 24 to December 28, 2005. When he was reassigned to Chicago in early January, he was in the midst of a ten game regulation undefeated streak (7-0-3), which included back-to-back shutouts on December 23 and 26 against the New Jersey Devils and Montreal Canadiens, respectively, through which he made 65 saves. Overall, Garnett posted a 10-7-4 record with the Thrashers.
Garnett's contract with the Thrashers expired after the 2006–07 season, which he spent entirely with the Chicago Wolves, splitting time with veteran Fred Brathwaite and posting a 23-15-1 record.
As an unrestricted free agent Garnett opted to sign a one-year contract with HC Neftekhimik Nizhnekamsk of the Russian Super League. He had a successful Russian debut, with Nizhnekamsk losing a 5 game series to the defending champions, Metallurg Magnitogorsk, in the first round of the playoffs. That summer, Garnett described his experience and how the language barrier was helping his hockey career: "Well, it literally was a blur for me because I couldn't understand anything. I could really focus and get deep into hockey more than I think I have before."
Garnett, again a free agent, signed a two-year contract with MVD Balashikha of the newly formed Kontinental Hockey League (KHL). After struggling through the 2008–09 season, posting a 15-17-1 record, Garnett bounced back for a successful 2009–10 campaign. He posted a 24-15-4 record, a 2.06 goals against average, .917 save percentage, and 5 shutouts. He played in the 2010 KHL All-Star game in Minsk and MVD won the Tarasov division title and Western Conference championship. In the Gagarin Cup Finals, MVD lost a close 7 game series to the defending champions, AK Bars Kazan. Garnett was named to the KHL's First All-Star team.
Following the 2009–10, MVD Balashikha merged with Dynamo Moscow to form UHC Dynamo. Garnett signed a one-year contract with the club prior to the start of the 2010–11 season. Despite missing some time to injury, Garnett had a successful season with Dynamo as the team finished 1st in their division with Garnett posting a 17-13-2 record and a .916 save percentage. UHC was upset in the first round of the playoffs in a six game series against Dinamo Riga, marking a disappointing end to what had been a strong season.
On May 2, 2011, Garnett signed a two-year contract with Traktor Chelyabinsk. His 2011-2012 season started in spectacular fashion, as he was chosen as goaltender of the month in the KHL for both October and November. He also played for Team Fedorov in the 2012 KHL All-Star game in Riga on Jan. 21, 2012. Michael won the Continental Cup with his team and became a fan favorite. He repeated as KHL Allstar in the 2012-13 season. His four-year stint at Chelyabinsk became to a close at the end of the 2014-15 season.
He then spent the 2015-16 campaign with HC Slovan Bratislava. On October 27, 2016, he was signed by another KHL club, Medvescak Zagreb of Croatia.
On February 13, 2017, Garnett was signed by SC Bern of the National League A (NLA) for the remainder of the season as a backup to add depth for the playoffs.
Garnett moved to the UK in May 2017, signing for EIHL side Nottingham Panthers ahead of the 2017-18 season.