George Kottaras hit his first major-league homer in the bottom of the 11th for the Red Sox, who tied the game at 5 with two runs in the eighth inning.
Seattle's Ronny Cedeno hit a tie-breaking, two-run homer in a three-run fourth, three batters after a fan in the front row snatched a foul pop that third baseman Kevin Youkilis was attempting to make a play on.
Tim Wakefield made his 383rd start for the Red Sox, surpassing Roger Clemens for the top spot on the team's all-time list.
Jose Lopez added a solo homer for Seattle, which won for the 11th time in 16 games.
J.D. Drew hit a solo homer for the Red Sox, who saw their major league-best home record fall to 25-11.
Franklin Gutierrez opened the 11th with a single against Ramon Ramirez (5-3) and Ryan Langerhans walked. Chris Woodward sacrificed the runners before Johnson hit his third double of the game, a line drive the right-field line.
Chris Jakubauskas (5-5) pitched two hitless innings for the win and Mark Lowe, despite giving up the homer to Kottaras, earned his first save.
The Red Sox rallied in the eighth against two relievers. Nick Green had a two-run double high off the left-field wall against Shawn Kelley after Sean White walked Jason Bay and Mark Kotsay singled.
Trailing 2-1, the Mariners got some unexpected help from a fan in the fourth.
Langerhans doubled with one out on the next pitch after the fan caught his foul with his hat just near Seattle's on-deck circle as Youkilis attempted to reach for it. When he got back to his position, Youkilis glared at the fan a few times.
After Woodward lined to center for what could have ended the inning, Johnson doubled off the Green Monster to tie it 2. As the fans around third base were chanting "throw him out," Cedeno homered to center to put the Mariners ahead 4-2.
Wakefield gave up five runs and 10 hits in eight innings, extending his home unbeaten streak 11 games dating to last Sept. 12. He is 8-0 in those starts.
Seattle starter Felix Hernandez gave up three runs in seven innings, striking out seven and walking two with two wild pitches and a balk.
Drew hit his 11th homer in the seventh, but Lopez homered into the "Monster Seats" leading off the next inning.
Boston scored two runs in the first when Jason Bay snapped an 0-for-17 stretch with an RBI double. David Ortiz scored the second run on Hernandez's wild pitch.
Hernandez entered with a 2-0 record and 0.00 ERA in his two career starts in Fenway Park, throwing 15 scoreless innings.