Snedeker captured his sixth career PGA title and second of the year after a February triumph at Pebble Beach, finishing on 16-under par 272 with countrymen Johnson, Jason Bohn, Matt Kuchar and William McGirt sharing second on 275.
It was Snedeker's third triumph in his past four attempts to win a US PGA event with a 54-hole lead, having also done so at Pebble Beach and last year's Tour Championship. He also led the Masters after 54 holes but settled for a share of sixth.
Snedeker claimed the $1 million top prize at Glen Abbey Golf Club after shooting a third-round 63 on Saturday to take the lead following the departure of 36-hole leader Hunter Mahan, who withdrew to attend the birth of his first child -- daughter Zoe was born early Sunday morning.
"Zoe will be getting a very nice baby gift from me," Snedeker said. "I can't thank Kandi enough for going into labor early. I don't know if I'd be sitting here if she hadn't. But that is a way more important thing than a golf tournament. I missed a golf tournament when my first was born, and it was the best decision I ever made. I'm sure Hunter would say the same thing."
Snedeker birdied the par-5 second hole and answered a bogey at the sixth with a birdie at the par-3 seventh to stretch his lead to two strokes. After starting the back nine with a birdie, Snedeker was on 16-under and three strokes ahead.
But when Snedeker took a bogey at the par-3 12th, he opened the door for Johnson, who birdied the par-5 13th and 16th to grab a share of the lead.
Johnson's title bid collapsed on the 17th, when he fired the ball out of bounds and then he left his fourth shot in a fairway bunker on the way to a triple-bogey seven that dumped him out of contention, even after a closing birdie at the par-5 18th.
"I was playing really well," Johnson said. "Really confident, swinging the driver really good. So you know, it's a driver hole for me, and I just blocked it a little bit. Made a poor swing. ... Not too happy, but I felt really good with my golf game. ... It's nothing, nothing to worry about. I'll go get them next weekend."
From there, Snedeker added a birdie at 16 and parred the final two holes to secure the victory.
"Just ecstatic right now," Snedeker said. "This is a tournament I said early on in my career I wanted to win just because my caddie (Scott Vail) is actually from Canada and it's his national open. It meant a lot to him, meant a lot to me. Third-oldest tournament on tour and it's got some great history to it, and now to put my name on that trophy it means a lot."
Americans Mark Wilson, John Merrick and Roberto Castro shared sixth on 276.
Leading final-round scores on Sunday in the US PGA Tour $5.6 million Canadian Open (USA unless noted, a-denotes amateur, par-72)
272 - Brandt Snedeker 70-69-63-70
275 - William McGirt 71-69-67-68, Dustin Johnson 75-67-63-70, Matt Kuchar 66-74-64-71, Jason Bohn 70-68-66-71
276 - Roberto Castro 69-70-67-70, John Merrick 71-62-72-71, Mark Wilson 70-69-67-70
277 - Aaron Baddeley (AUS) 68-68-73-68, Jim Furyk 72-67-68-70, Patrick Reed 68-68-70-71
278 - Rory Sabbatini (RSA) 69-71-71-67, Greg Owen (ENG) 70-68-67-73, Kyle Stanley 68-71-66-73-, David Lingmerth (SWE) 67-71-65-75
279 - Marcel Siem (GER) 71-70-69-69, Hideki Matsuyama (JPN) 69-69-71-70, Chad Campbell 71-72-66-70, Fabian Gomez (ARG) 72-68-67-72, Charley Hoffman 69-69-67-74
280 - Luke List 72-69-70-69, Andres Romero (ARG) 69-70-71-70, Ernie Els (RSA) 71-72-67-70, James Driscoll 69-69-71-71, Chris Kirk 68-69-71-72, Bubba Watson 68-67-72-73, Trevor Immelman (RSA) 68-73-66-73