Nelson Cruz had three hits and scored twice a night after hitting two homers and driving in seven runs for Seattle, which went on its skid after beating Boston two straight at home last weekend.
Leake (8-4) gave up three singles, struck out five and walked two six days after he allowed five runs and took the loss against the Red Sox at Safeco Field. Edwin Diaz gave up two runs in the ninth.
J.D. Martinez had two singles for Boston after going 4 for 5 with five RBIs when the Red Sox collected a season-high 20 hits in a 14-10 victory Friday.
Eduardo Rodriguez (9-2) gave up five runs, four earned, in four innings, snapping his personal six-game win streak. The Red Sox were 13-1 in his starts this season.
Playing on a cool, misty night, the Mariners managed to close out the Red Sox after blowing two five-run leads during their slide, including Friday.
Seattle broke it open with three runs in the fourth. Haniger made it 4-0 with a two-out, two-run double off the Green Monster. He scored from second on Kyle Seager's infield hit when Rodriguez slipped covering first and turned late for the plate.
Haniger also had an RBI double in the first.
Mariners: SS Jean Segura missed his third straight game with a right forearm infection. "The swelling has gone down quite a bit," manager Scott Servais said. The plan was for him to hit and field to see where he'd be for Sunday afternoon's game.
Red Sox: Manager Alex Cora said LHP Drew Pomeranz (10-day DL, left biceps tendinitis) felt better after throwing off a mound on Friday. He threw lightly on Saturday and Cora said he "might do another bullpen" on Monday. ... 3B Rafael Devers fouled a ball of his foot and came out after completing his at-bat.
Red Sox right fielder Mookie Betts and shortstop Xander Bogaerts were both out of the lineup.
Cora said Betts was "a little bit under the weather. He had no energy." The All-Star outfielder entered Saturday with a .342 average, second-best in the majors, with 19 homers and 39 RBIs.
Bogaerts left Friday's game after he sprained his left index finger on a headfirst slide to second.
For the second straight game, both starters had faced the same team in their previous start. Rodriguez earned the win, allowing only two runs in six innings last Sunday in Seattle.
"It does make it a little bit more challenging for the pitcher in my mind," Servais said.
Cora said: "You have to make an adjustment just to make an adjustment."
Mariners: LHP Marco Gonzales (7-4, 3.80 ERA) is slated to start the series finale Sunday. He's 6-2 with a 2.88 ERA in his last 11 starts.
Red Sox: LHP Chris Sale (6-4, 2.74) is set to start. The ace has allowed one or no runs in nine of 17 starts this season and is 5-1 with a 2.09 ERA in his career against Seattle.
Copyright 2018 The Associated Press. All rights reserved. This material may not be published, broadcast, rewritten or redistributed.