Chad Bettis lost a perfect game in the seventh inning and a no-hitter in the eighth, but ended up a winner for the Colorado Rockies.
Tulowitzki belted solo homers off Phillies ace Cole Hamels and finished with four hits, but made an error that ended Bettis' perfect game in the seventh.
Cody Asche, called up from the minors by Philadelphia prior to the game, put a stop to the no-hit bid with a one-out single in the eighth.
Although Bettis (2-0) carried a two-hit shutout into the ninth inning against San Francisco on Sunday, he would have been an unlikely candidate to throw Colorado's second no-hitter.
The 26-year-old right-hander was making his 12th career start and entered the game with a 6.29 career ERA in 88 2/3 innings. He allowed two hits, no walks and struck out seven in eight frames.
The Rockies have won all four of his starts since he was called up from the minors on May 14. That includes a 6-5 win over Philadelphia on May 19 in which he gave up three runs in six innings but did not factor in the decision.
Ben Paulsen hit a two-run homer off Luis Garcia in the ninth inning after the Phillies had turned a double play, accounting for Colorado's final runs.
They have lost five in a row to fall 12 games under .500 (19-31) for the second time this season.
Hamels (5-4) pitched well but had a four-start winning streak snapped. He gave up five hits, three to Tulowitzki, but struck out nine and walked just one.
Ryan Howard had the hardest-hit ball off Bettis, a drive to the warning track leading off the fifth inning that Barnes, then playing center field, caught near the top of the short fence to steal a potential home run.
Bettis lost his perfect game on Ben Revere's hard-struck ball up the middle to lead off the seventh, which the pitcher deflected. Tulowitzki didn't get his glove down on the ball, letting it hit off his foot as he tried to field it up the middle.
Charlie Blackmon, who entered the game in the seventh, made a sliding catch in center on Freddy Galvis' fly ball a batter later to preserve the no-hitter.
But Asche ended the bid when he slapped Bettis' 90th pitch through the left side to beat a shift in the eighth. Carlos Ruiz then dropped a two-out single into shallow right field to put runners on the corners before Bettis struck out Darin Ruf on a check swing to end the inning.
Ubaldo Jimenez threw the only no-hitter in Rockies history on April 17, 2010, in Atlanta.
The Phillies called up Asche, their former everyday third baseman, after he spent the past two weeks learning to play left field at Triple-A Lehigh Valley while Maikel Franco took over at the hot corner.
Asche started in left, the first time he's played a position other than third at the major league level.
Both of Tulowitzki's home runs sailed high over Asche and landed deep in the seats behind left field in the first and third innings.
Philadelphia manager Ryne Sandberg was ejected from the game in the top of the ninth inning for arguing a check-swing call from the dugout. Sandberg was apparently upset over Ruf's swing being called a strike in the eighth and Nolan Arenado's being ruled a ball in the ninth ... The Phillies sent Grady Sizemore to Lehigh Valley to make room for Asche ... Friday was the five-year anniversary of Roy Halladay's perfect game for the Phillies against Miami. It was a little over a year since the Phillies were no-hit by Los Angeles' Josh Beckett last May 25, also at Citizens Bank Park ... The Phillies started a nine-game homestand. They were coming off a 3-7 road trip that started with a four-game split against Colorado from May 18-21.