Martin Frk and Darren Helm also scored for Detroit, which has won four of five following a six-game losing streak. Jimmy Howard made 26 saves after Petr Mrazek's 36-save shutout in Edmonton the night before.
Daniel Sedin and Michael Del Zotto scored for Vancouver, which completed a 2-2-1 homestand. Jacob Markstrom made 26 saves in his fourth straight start.
Tatar scored the winner with 1:14 left shortly after a faceoff. A deflected puck went right to him and he made no mistake with a wrist shot over Markstrom's right shoulder for his 200th career point.
Despite playing its second game in two nights, Detroit came out more aggressive and opened the scoring less than five minutes in on a rush. A streaking Justin Abdelkader swatted his rebound off the back boards to Frans Nielsen, whose shot Markstrom kicked out right to Helm for a putback.
The Canucks had a chance to tie it with Abdelkader off for interference later in the first, but struggling captain Henrik Sedin missed a wide-open net.
He got another chance in the second when Jake Virtanen sprung him for a breakaway, but Henrik Sedin put the puck squarely on Howard's jersey logo.
The Red Wings went up 2-0 at 15:15 on the power play with a goal that had Canucks fans groaning. Frk's slap shot through traffic rebounded to Canucks defenseman Chris Tanev, who appeared to miscalculate a clearing attempt and shoveled the puck right into his own net. Frk was credited with the goal.
The Canucks rallied to tie it in the third with goals 2:14 apart. First, Daniel Sedin battled for a loose puck in the Detroit crease before backhanding it in to make it 2-1 seven minutes in. Then, Bo Horvat found Del Zotto in the slot and the defenseman wristed the puck over Howard's shoulder, as the crowd cheered. It was Daniel Sedin's first goal in seven games and Del Zotto's first of the season.
NOTES: The Canucks wore lavender jerseys in warmups as part of Hockey Fights Cancer Awareness night. ... Vancouver recalled forward Brandan Gaunce from Utica of the AHL.
Red Wings: At the Calgary Flames on Thursday night.
Canucks: At the Calgary Flames on Tuesday night.