Victor Martinez had a two-run single while Andy Dirks knocked in the other run for Detroit, which has stumbled recently with just three wins in its last nine games.
Detroit starter Brad Penny rebounded from a rough beginning and tossed 6 1/3 innings to post his first win since June 5th. Penny (6-6) allowed four runs on six hits and struck out three.
"I wasn't making pitches in the first," Penny said. "But my focus got better and after that I made pitches. The guys did a great job coming back. The offense and the bullpen were responsible for the win today."
Howie Kendrick had two RBI and Mark Trumbo belted a solo home run for the Angels, who had a four-game win streak snapped.
Hisanori Takahashi, who entered the game in the sixth to replace Halos starter Tyler Chatwood, could not hold onto a 3-2 lead.
Takahashi (2-2) walked Austin Jackson to start the seventh, and two batters later, Dirks' soft liner to right scored Jackson to knot the game at three.
Michael Kohn then came into the game for the Angels and served a two-run homer to Cabrera on his third pitch.
During the bottom half of the inning, Trumbo ended Penny's outing with a solo shot over the left field fence that cut the hosts' deficit to one.
From there, the questionable Detroit bullpen held onto the narrow margin. David Purcey recorded the final two outs of the seventh after replacing Penny, and Joaquin Benoit -- whose ERA has skyrocketed from 1.34 with the Rays last season to 4.41 with the Tigers this season -- worked around a two-out walk for a scoreless eighth.
Closer Jose Valverde pitched a 1-2-3 ninth to record his 21st save of the season.
"It was a tough day," Angels manager Mike Scioscia said. "You can't give that team (Detroit) eight walks and an error and expect to win."
The Angels got after Penny quickly with three runs in the first. Torii Hunter and Bobby Abreu hit one-out singles to put runners on the corners and set up Vernon Wells' RBI double into left.
Kendrick kept the rally going with a grounder up the middle that plated both Abreu and Wells.
Detroit got on the board with a two-run third. With men on second and third with two down, Cabrera walked, and Martinez followed with a line drive single that made it a 3-2 game.
Detroit outfielder Brennan Boesch was not in the lineup after fouling a pitch off his right knee on Tuesday...Jackson had half of the Tigers' eight walks in the game...Kendrick extended his hitting streak to 15 games... Detroit's Jhonny Peralta went 0-for-4 to snap a 12-game hitting streak...Chatwood went 5 1/3 innings, allowing two unearned runs on four hits.