Astros center fielder Justin Maxwell threw to third baseman Matt Dominguez, who applied the tag to Sappelt. Castro didn't touch the plate before the third out, though, so the 8-5 double play ended the inning without a run scoring.
The Cubs, who were shut out for the first time since Aug. 12 against the Reds, left 11 stranded in the game and saw their four-game winning streak come to an end.
Manager Dale Sveum said he thought Castro was giving it his full effort down the baseline.
"He must have been because they both have the same speed, and one guy was thrown out by a little bit and [Castro's] foot was in the air when he was going to touch home plate," Sveum said. "It wasn't the brightest thing I've ever seen in baseball."
Sappelt chose to try to advance to third base on his own.
"It's not a coach's decision," Sveum said. "That's a player just not being very smart."
Astros interim manager Tony DeFrancesco said the double play was the biggest play in the game.
"Castro, I'm not sure if he wasn't running as hard as he could, but the out was made at third before he scored, so that was a big play for us to give us a chance to have a 1-0 lead," DeFrancesco said.
The Cubs' lack of offense wasted a strong outing from starter Justin Germano and the bullpen. The Astros tallied just four hits and only scored an unearned run, which came in the third inning.
Jimmy Paredes singled with one out in the third off Germano. He raced to third when Cubs catcher Steve Clevenger picked up Fernando Martinez's ground ball and tossed it over the head of first baseman Bryan LaHair. Paredes scored on a sacrifice fly by Maxwell.
That unearned run was the only run Germano allowed over five innings. He allowed three hits and struck out eight. The last time he struck out eight batters was July 29, 2006, the sixth start of his career.
"He did a great job," Sveum said. "He had everything working today."
Germano gave up five or more earned runs in each of his last four starts.
"My last four have definitely not been that good, so I was just happy to end the road trip on a good outing and hopefully carry that into my next one," Germano said.
Sveum decided to pull Germano after 81 pitches through five. Germano said he normally would've been frustrated to come out that early, but he understood considering how his last few starts have gone.
The Cubs' offense was quiet in big situations against starter Jordan Lyles and relievers Cedeno, Storey, Wesley Wright, Jose Valdez and Wilton Lopez.
After loading the bases with one out in the second, Germano hit into a 3-2 fielder's choice and David DeJesus lined out deep to center field to end the inning.
"DeJesus just crushed that ball to center field and got nothing to show for it," Sveum said. "That was a big back-breaker to start the game off"
Germano and DeJesus reached to open the fifth, but Luis Valbuena, Joe Mather and Alfonso Soriano went down in order.
The Cubs' poor baserunning in the sixth cost them at least one run. Maxwell, who made the key throw to third, said he was surprised Sappelt went.
"I knew I had no shot at the plate, and I kind of peaked as I was catching the ball and I thought he was going to stop running, but he kept going all the way to third and Dominguez made a great tag and got him before [Castro] got to the plate," Maxwell said.
The Astros made four errors in Tuesday's game -- three by Paredes, the second baseman.
First baseman Anthony Rizzo left the game in the third inning after colliding with Astros first baseman Brett Wallace. Rizzo was listed as day to day with a bruised right shoulder.
The Cubs are now 1-4 at Minute Maid Park this season. Chicago needs to go 8-12 over its final 20 games to avoid a 100-loss season.