Robinson Cano hit a two-run double in the sixth for the Mariners, who won consecutive games for the first time since the opening week of the season.
Cano's double was the only time the Mariners got to Texas starter Robbie Ross Jr., but they battered reliever Neal Cotts (1-2) in the eighth inning, scoring four times to end the Rangers' win streak at three games.
With no outs and the bases loaded, Smoak avoided the temptation of two inside pitches from Cotts and worked the count full. Then he lined a pitch down the left-field line and just out of the reach of Michael Choice, allowing Cano and pinch-runner Michael Saunders to score the go-ahead runs.
Seattle scored runs in the eighth for the first time this season, having been outscored 18-0 in the inning. The Mariners had not won two straight since their three-game sweep of the Angels to open the season.
Smoak also preserved the win in the ninth with a diving grab of Adrian Beltre's liner to first with the bases loaded that he turned into a double play for the final outs.
The Mariners' rally started thanks to Cano, who led off the eighth with a single on the first pitch. Corey Hart worked a full count before being hit on the knee by Cotts' pitch the fourth Seattle batter to be hit by a pitch and Stefan Romero loaded the bases with a bunt single.
That's when Smoak came through with his fifth double. Kyle Seager added an RBI single and Smoak scored on a wild pitch from Alexi Ogando for a 6-3 lead.
Seattle relievers Dominic Leone and Yoervis Medina (1-1) bridged the late innings after starter Roenis Elias lasted 5 2-3 innings. Leone's wild pitch that allowed Prince Fielder to score with two outs in the sixth was the difference until the late rally.
Fernando Rodney got his fourth save but made it uncomfortable in the ninth. He loaded the bases with one out and walked Choice and Elvis Andrus to force in runs and make it 6-5. Beltre hit a liner that appeared headed for the outfield. Smoak made a diving grab and doubled Andrus off first to end the game.
Ross threw six innings, giving up six hits and two runs. He has gone 84 batters without issuing a walk. His lone trouble came in the fifth inning when he hit Abraham Almonte with a pitch with two outs and then gave up a single to Willie Bloomquist. Cano followed by lining a double off the wall in left-center, scoring both runners. It was his fourth double of the season and fifth extra-base hit.
NOTES: Texas C J.P. Arencibia snapped an 0-for-19 skid with a double leading off the third. It was his third hit of the season and first since April 6. ... Injured Seattle LHP James Paxton threw for the first time since straining a back muscle this month. Paxton threw from 45 feet. Injured RHP Taijuan Walker (shoulder) is expected to start throwing on Monday. ... Seattle Seahawks DE Michael Bennett threw out the ceremonial first pitch.