His third three-pointer gave Tampa Bay a 16-13 lead with 5:36 remaining, and the fourth came with 3:30 left shortly after a fumble recovery by Tampa Bay's defense.
Six-year veteran running back B.J. Askew rushed for his first career touchdown after replacing the injured Earnest Graham, who suffered an ankle injury on the game's first offensive play.
Quarterback Jeff Garcia completed 23-of-30 passes for 255 yards in the Buccaneers' fourth win in their last five games.
A third Tampa Bay running back, "Cadillac" Williams (knee) was inactive.
Minnesota's Gus Frerotte finished 14-of-20 for 138 yards and one touchdown.
Running back Adrian Peterson rushed 19 times for 85 yards, and wide receiver Bobby Wade caught Frerotte's 4-yard touchdown pass in the second quarter for the Vikings, whose two-game winning streak ended.
They dropped into a three-way tie with Green Bay and Chicago atop the NFC North.