Mike Trout matched his season high with four hits for the Angels, who trailed 8-1 after four innings. Peter Bourjos homered and had three hits, and he scored the tying run in the eighth during Los Angeles' final rally for its sixth win in eight games.
Kyle Seager matched his career high with four hits and drove in the tiebreaking run in the eighth during a gut-wrenching loss for the Mariners, who couldn't protect a huge lead even with Felix Hernandez on the mound.
Mark Trumbo hit a three-run homer while the Angels tied a single-game club record with seven consecutive hits during a five-run fifth inning. Albert Pujols had two hits and drove in the tying run on a broken-bat single in the sixth.
Seager had a homer and two doubles during the first four-hit game by a Seattle player this season. Josh Hamilton couldn't catch his sinking liner to right in the eighth, and Brendan Ryan scored to put Seattle up 9-8.
But Bourjos singled, stole second, advanced on a throwing error and tied it on Erick Aybar's RBI single off Carter Capps (2-2). Seattle walked Trumbo to load the bases with one out, and Ryan made a diving stop to force out Trout at the plate before Yoervis Medina walked Callaspo on four pitches.
Ernesto Frieri pitched the ninth for his 17th save. Scott Downs (1-2) gave up Seager's double, but also got one out in the eighth.
Tommy Hanson yielded six hits and seven runs during the second-shortest start of his career, getting chased by Seattle without getting an out in the third.
But Hernandez yielded 12 hits and seven runs in five innings despite having a 3-0 lead before he took the mound and an 8-1 advantage in the third. Trout had three hits off King Felix, improving to 14 for 30 in his short career against Seattle's star right-hander.
The Mariners' first three batters against Hanson all scored, with Seager hitting his ninth homer. Seattle's first four hitters reached base in the third to chase Hanson.
The Angels trailed 8-2 when Bourjos led off the fifth with his third homer of the season. The speedy outfielder hadn't homered since April 15 after missing 38 games with a hamstring injury.
The next six Angels also got hits, with Pujols driving in a run before Trumbo cleared the bases with a homer off the fake rock pile in center field. Seattle manager Eric Wedge kept his ace in the game, and Howie Kendrick got thrown out trying to stretch a single into a double before Chris Iannetta grounded out to end it.
Danny Farquhar intentionally walked Trout in the sixth to get to Pujols, who poked a broken-bat single into center to score Bourjos with the tying run.
NOTES: Despite making a sharp running catch at the wall in the ninth inning, Hamilton had yet another miserable game, going 0 for 4 with an RBI in the $125 million slugger's second game in the No. 7 slot in manager Mike Scioscia's order. He grounded into yet another double play in the seventh inning, and struck out with the bases loaded to end the eighth. ... Hernandez wore a shoulder patch honoring Lewis Yocum, the Angels' late team orthopedist. The Angels have been wearing the patch on their uniforms since his death in late May, and Hernandez requested his own before the game. Yocum worked with Hernandez on the right-hander's elbow problems. ... The Angels set the club record with seven consecutive hits Aug. 31, 2002 against Baltimore. ... Angels RHP Dane De La Rosa had four strikeouts in two innings of one-hit relief.