This time, Seattle's rally was enough for a victory.
The Mariners wiped out deficits of five runs and four runs in their previous two games but lost both of them. This time, Seattle trailed, 7-3, after three innings before coming back.
"There was still a lot of game left," Seattle's Mike Cameron said. "We've still got six innings to play after that."
Bret Boone's two-run homer in the fifth against Rick Reed pulled the Mariners to 7-5.
John Olerud tied the score in the sixth off Joe Mays (8-7) with a two-out, two-run single, and Cameron came home with the go-ahead run after center fielder Jacque Jones' throw skipped over catcher A.J. Pierzynski for an error.
Winn, who went three for four, followed with his fourth homer, an opposite-field drive to left.
The AL West-leading Mariners stopped a three-game losing streak, which matched their season high. Mariner shortstop Mark McLemore committed a throwing error in the game, only Seattle's 35th in 99 games.
Minnesota had won five in a row after the All-Star break but dropped to 49-50 and fell behind Chicago into third place in the AL Central.
Boston 7, Detroit 4 -- Derek Lowe pitched eight strong innings and Kevin Millar and Jason Varitek hit back-to-back homers in the fourth inning at Boston.
Lowe (11-4) gave up homers to Eric Munson and Dmitri Young but allowed only four other hits. The sinkerballer recorded 18 outs on grounders, struck out four and walked none.
Oakland 10, Kansas City 0 -- Tim Hudson gave up only one hit in seven innings at Kansas City, Mo.
Erubiel Durazo hit two homers and drove in three runs for Oakland, which handed Kansas City only its second shutout loss this year.
Chicago 5, Cleveland 2 -- Bartolo Colon won for the first time in six weeks, and Frank Thomas and Magglio Ordonez hit consecutive first-inning homers at Chicago.
Baltimore 12, Texas 6 -- Jay Gibbons homered and drove in four runs at Baltimore as the Orioles extended their winning streak to six games.
Toronto at New York -- The game was rained out. No makeup date was announced.