Kipnis' home run came on an 0-1 pitch from Lucas Luetge and capped a two-out rally that began with a walk and an infield hit.
The Indians have won 15 of 19 and are 10-2 at Progressive Field since April 30.
Vinnie Pestano (1-0), activated from the disabled list before the game, worked around a one-out walk in the 10th.
Drew Stubbs, who homered in the fifth, drew a walk off Luetge (0-1). Stubbs broke for second with a 1-2 count on Michael Bourn, and Luetge threw to first baseman Justin Smoak, but Stubbs beat the throw to shortstop Brendan Ryan.
Bourn hit a slow roller past the mound and second baseman Dustin Ackley's throw to first was late. Kipnis followed with his seventh homer.
The Mariners fell short of reaching the .500 mark for the first time since they were 4-4 on April 8. Raul Ibanez's two-run homer in the sixth tied the game, and the bullpens on both sides took over.
Chris Perez retired the side in order in the ninth. Perez, who has been nursing a stiff shoulder, was pitching for the first time since May 11. Pestano had been on the DL since May 1 with a sore right elbow.
Mariners relievers Charlie Furbush and Carter Capps combined to pitch 3 1-3 scoreless innings. Capps struck out Mark Reynolds to start the 10th. Luetge got Michael Brantley to ground out before running into trouble.
Seattle lost for just the seventh time in 19 games.
Ubaldo Jimenez allowed two runs and struck out a season-high nine in five innings. He was pulled after Smoak led off the sixth with a single. Rich Hill was brought in to face Ibanez, who homered to right on an 0-1 pitch to tie the game.
Jimenez, who had won three consecutive starts, struck out five of the first seven batters he faced.
Seattle rookie Brandon Maurer allowed three runs in six innings. The right-hander matched a career high with six strikeouts.
Jason Giambi's sacrifice fly gave Cleveland the lead in the second. Maurer's wild pitch allowed another run to score.
Kendry Morales' solo homer into the second deck in right field cut the lead to 2-1 in the fourth. Stubbs homered in the fifth to give Cleveland a two-run lead.
Nick Swisher drew a leadoff walk in the second and took third on a double by Carlos Santana. Swisher scored on Giambi's fly ball to right, which also moved Santana to third. Santana scored when Maurer bounced a pitch in front of the plate with Brantley batting.
Morales, who flirted with an extra-base hit down the right-field line before lining out to Jimenez in the first, homered on a 2-0 pitch with one out in the fourth.
Jimenez struck out Morales with two on to end the fifth.
Stubbs' drive to right with one out in the fifth landed in Seattle's bullpen, barely clearing the wall.
A player from each team came up hobbled in the third when Kipnis was thrown out trying to steal second base. Kipnis banged his head into the right leg of Ryan as he dove into the bag. Ryan applied the tag, but both players were down for a couple of moments after the play as the two managers and trainers ran on the field. Kipnis and Ryan remained in the game.
Mariners outfielder Michael Morse was a late scratch with an irritated eye. Endy Chavez took his spot in right field and batted eighth.
Notes: The game drew a crowd of 34,282, a total boosted by a postgame fireworks show and a $1 hot dog promotion. The Indians are last in the majors in attendance despite being 17-7 since April 20. ... Indians RHP Brett Myers (sore elbow) pitched three scoreless innings for Double-A Akron on a rehab assignment against Erie on Friday. ... Mariners RHP Hector Noesi, who made an emergency start Thursday in place of RHP Aaron Harang (lower back stiffness), was optioned to Triple-A Tacoma before the game. RHP Danny Farquhar was called up from Tacoma to provide some bullpen depth for the next couple of days. ... Seattle manager Eric Wedge said Harang was examined by a chiropractor Friday and is still set to make his next start Tuesday against the Angels. ... Jimenez hasn't won four consecutive starts since 2010. ... Mariners LHP Joe Saunders (3-4) meets Indians RHP Zach McAllister (3-3) on Saturday.