Fowler also had a solo homer as Houston snapped a three-game losing streak. Chris Carter connected for a two-run shot in the second.
The game was tied at 3 when Fowler drove in Marwin Gonzalez with a base hit against Sean Doolittle (0-2). Jason Castro then singled in Jose Altuve, and Fowler and Castro eventually came home on groundouts.
Brandon Moss hit a three-run homer in the Oakland ninth against Jerome Williams (1-1). Nick Punto then singled, but Coco Crisp bounced into a fielder's choice and Raul Valdes struck out John Jaso and Jed Lowrie for his first save.
Houston ended an eight-game losing streak against Oakland, dating to last season. The Astros also improved to 6-25 against the A's overall.
Houston also won at home for the first time since April 6, ending a six-game losing streak. The Astros have won three of their last 13 games.
Fowler went deep in the first and Carter's drive to left on an 0-1 pitch from Dan Straily gave the Astros a 3-2 lead in the second.
Straily struck out seven in 6 1-3 innings. The right-hander allowed four hits and walked two.
The Athletics trailed 3-2 until Crisp drove in Craig Gentry with a sacrifice fly against Williams in the seventh.
Keuchel also went 6 1-3 innings for Houston. The lefty was charged with three runs and six hits, struck out six and walked two.
NOTES: Oakland outfielder Yoenis Cespedes participated in batting practice and did light individual jogging to test a strained left hamstring. Cespedes left in the seventh inning of Oakland's 10-1 win over Houston on Thursday after legging out an infield single. Oakland manager Bob Melvin said before Saturday's game that he could potentially be available off the bench, but Cespedes did not play. ... For just the second time in their last five games, the Astros did not commit an error. They entered the week ranked third in the majors with seven errors but committed eight on Thursday and Friday.