Jordan Pacheco and Carlos Gonzalez had two hits each for Colorado, which beat Arizona for just the fifth time in 17 games.
The rally capped an eventful day for Pacheco and catcher Wilin Rosario. Both players were called up before the game and made their major league debuts against the Diamondbacks.
"I felt comfortable," Rosario said. "After I threw the first ball back to the pitcher and they said, 'Play ball', I felt comfortable."
Pacheco played third and got a hit in his first big league at-bat. He also made an error that led to an Arizona run but it was nullified by Tulowitzki's homer.
"Pacheco had some great at-bats tonight got a couple of hits, drove in a couple of runs," Rockies manager Jim Tracy said. "He's not afraid to work either."
The Rockies' win temporarily put the brakes on Arizona's drive to the NL West title. The Diamondbacks had won 12 of their last 13 to take a seven-game lead in the division.
Arizona led 3-1 and appeared headed to its fourth straight win when the Rockies rallied for seven runs with two outs in the eighth. With Dexter Fowler on first, Mark Ellis singled to left and Carlos Gonzalez knocked in a run with a single to center off reliever David Hernandez (3-3).
Tulowitzki followed with his 30th homer to center to make it 5-3.
"I've had three of those nights where I've given up multiple runs," Hernandez said. "I hung a slider to Tulo and he did what he's supposed to do to with it."
It was the second straight game Tulowitzki hit a three-run homer.
"I was fired up for myself and the fact that I hit a go-ahead home run," he said.
Hernandez gave up a single to Ty Wigginton before Joe Patterson came on, and Smith greeted him with an RBI triple that made it 6-3. After Rosario walked, Pacheco followed with a run-scoring single.
Matt Belisle (10-4) got the win in relief.
The Diamondbacks made it 3-1 when Hill scored from third on a throwing error by third baseman Pacheco in the eighth.
"That ball to Pacheco is a tough play," Tulowitzki said.
The Diamondbacks took a 1-0 lead in the first when Hill and Upton hit consecutive one-out singles to put runners at the corners and Montero followed with an RBI grounder.
The Rockies tied it in the fifth when Smith led off with a triple to center and scored on Pacheco's grounder to third.
Colorado starter Jason Hammel went seven innings, allowing two runs, one earned, on six hits and struck out six.
Rockies 1B Todd Helton didn't play for the third straight day due to back stiffness. ... Rockies OF Ryan Spilborghs (right foot) will likely not play the rest of the season. ... The Rockies promoted Pacheco and right-hander Jim Miller from Triple-A Colorado Springs, and brought up catcher Wilin Rosario from Double-A Tulsa before the game. They placed INF Jonathan Herrera (right index finger) on the 60-day DL. ... Arizona lefty Joe Saunders will face Rockies righty Kevin Millwood in the series finale Wednesday night.