Rivera tied the game with a two-run homer in the second and put the Angels on top for good with an RBI double in the fourth.
"He's got the potential to break out," said Angels manager Mike Scioscia. "It was a good day for him tonight because he really carried a big part of our offense."
However, Rivera suffered a mild strain in his right hip flexor running into second base on his final double in the eighth and had to leave the game.
Rivera, who has driven in 16 runs in his past 13 games, said through a translator it felt "more like a tug" and "a quick jolt," so he exited to make sure the condition did not worsen. Rivera is not expected to play Sunday, but could be available against the A's, starting Tuesday in Oakland.
Rivera's big day made a winner of Garland (14-8), who worked past another poor first inning to throw six innings of two-run ball. He gave up a pair of runs on three hits in the first, and then retired nine consecutive batters while not yielding another hit until Ichiro Suzuki tripled in the fifth.
"Jon, once he got his feet on the ground, I thought he pitched well," Scioscia said. "First inning, he had trouble closing the inning out, and a couple times they hit a couple balls hard, but we made the plays. I think as Jon got into the game, he had a much better feel for changing speeds, and I thought he pitched a strong ballgame."
Garland admitted struggling early has been his "downfall" this season, particularly during his past four starts in which he has yielded nine runs on 14 hits in those opening frames (20.25 ERA).
The right-hander has now strung a pair of quality starts together after giving up just one first-inning run on six hits in seven innings Monday to beat the Yankees.
"Getting toward the end of the season, it is nice to get back on top of the ball, throw the ball well and give yourself a good chance to win," Garland said.