"It was an unfortunate chain of events, kind of lost feel," Keuchel said. "Other than that, I felt great. I cost the team, pretty much. I just didn't have the feel. When that happens, give them credit for laying off some pitches. That's a good team. I was fortunate enough to even get out of there with even three runs."
Keuchel (6-3), the reigning American League Player of the Week, suffered his first loss since May 3. He gave up six hits and three runs for his fifth consecutive quality start. He was 4-0 with a 1.05 ERA in his previous four outings, including two complete games.
"He lost his command, but it looked like he kind of lost the attack in which we are accustomed to seeing," Astros manager Bo Porter said. "It was more changeups and sinkers, and that's very uncharacteristic of Dallas to lose his command like that and walk three guys in a row."
The Astros were held to five hits for the third consecutive game, going 1-for-7 with runners in scoring position. George Springer was 0-for-4 for the second game in a row, and Jose Altuve went 0-for-4 to snap his nine-game hitting streak.
"Obviously, today we didn't swing the bats well enough to win the game," Porter said. "I felt like we expanded our zone and didn't get quality pitches to hit."
Keuchel and Orioles starter Chris Tillman (5-2) were locked in a 1-1 tie through four innings when Keuchel's control went awry.
With two outs and a runner on first base in the fifth, Keuchel gave up a bloop single to right and then walked three batters at the top of the order -- Nick Markakis, Steve Pearce and Nelson Cruz -- to force in a pair of runs and put the Orioles ahead, 3-1.
"I thought I did an all right job at the end, but other than that, it's disappointing, just by the way we've been playing," Keuchel said. "I think the guys were feeding off me, and after those two runs, the momentum was definitely in [the Orioles'] favor. I did a poor job right there in the fifth."
It's the second time this year Keuchel has walked three consecutive batters. He did it against the Mariners to start the seventh inning on May 3.
"It's not something that you're accustomed to seeing him go out there and do, but once he walked the first guy, the second guy, I think the third guy walked in the box and obviously was a little bit more patient at that point, given the fact that he's walked the two guys in front of him," Porter said.
Keuchel righted the ship in time to strike out Adam Jones on a 3-2 pitch to end the inning, a pitch that frustrated Jones so badly that he slammed his helmet into the ground.
"I think one of [the walks] might have kind of been intentional-unintentional," Orioles manager Buck Showalter said. "He didn't want to give in there and it got away from him, but there were some real patient at-bats. And Adam almost finished his off."
Cruz walloped his Major League-leading 20th homer of the season in the eighth inning off reliever Jerome Williams. Cruz has 52 RBIs to set a club record for RBIs before the end of May, passing Chris Davis' record of 50 from last year.
"Just tried to go wherever the ball is," Cruz said. "If it's inside, try to turn on wherever it is. I'm in the zone right now. I can see the ball well enough, stay long enough, pull the ball."
Markakis started the game with a double to left field that resulted in a close play at second base. Replays seemd to show that Markakis was actually tagged out by Altuve, but Porter opted not to challenge after coming onto the field and talking to the umpires.
"I think we flat-out missed that one," Porter said when asked why he didn't challenge the call.
In the first, Cruz hit a sacrifice fly to score Markakis and put the Orioles ahead, 1-0.
The Astros loaded the bases with one out in the second and tied the game when Robbie Grossman reached on an infield hit that scored Jason Castro, who started the inning with a double. Tillman got Marwin Gonzalez to pop out and retired Altuve on a nice running catch in right by Markakis to end the inning.