The win was Boston's sixth in as many games against the Angels this season and the Red Sox's 15th in 16 meetings between the teams dating to the start of last season.
Rookie Mark Trumbo's second-inning line-drive home run into the last row of seats above the left-field wall gave the Angels a quick 1-0 lead against Boston ace Jon Lester (4-1). But that was all they got as the let-hander stuck out 11 in seven innings.
The Red Sox started their comeback against Dan Haren, the American League's ERA leader, in the sixth when consecutive two-out hits by Gonzalez, Ortiz and Jed Lowrie gave Boston a 2-1 lead.
After giving up the Gonzalez homer leading off the eighth, Haren (4-2) left in favor of Hisanori Takahashi, who served up a home run to Ortiz on his second pitch. Three batters later Marco Scutaro, a late addition to the lineup, added a two-run homer of his own, his first of the season.
Five players had two hits for the Red Sox, including Gonzalez who also scored twice and knocked in two runs.
Maicer Izturis and Torii Hunter had two hits apiece for the Angels, who made some late noise against Boston closer Jonathan Papelbon by scoring a pair of ninth-inning runs on a ground-rule double by Erick Aybar and Trumbo's sacrifice fly.
-- Kevin Baxter in Boston
Photo: Boston's Adrian Gonzalez, right, is congratulated by David Ortiz after hitting a solo home run during the eighth inning of the Angels' 7-3 loss Tuesday at Fenway Park. Credit: Matt Campbell / EPA