The Rangers starters had allowed at least six runs in each of the previous four games.
Harrison (13-6) held the Royals to two runs and eight hits in 6 2/3 innings.
"He's got a mean streak now," Rangers manager Ron Washington said. "That mean streak grew into him. He didn't always have it. He hates to be taken out of the game. He hates when he doesn't go out there and do good."
Harrison, who went 1-3 in July, walked three and struck out three, departing after 109 pitches.
"I had a pretty successful year last year and I wanted to continue doing that," Harrison said. "My confidence has grown a lot in myself and trusting my stuff. I understand why I get taken out of games, but I hate getting taken out of innings. I want to finish the inning every time, but it's understandable with the situation. I just want to compete and be one of the best pitchers in the game."
Washington said he wondered how long Harrison would be able to go after throwing 63 pitches over the first three innings.
"He was trying to find his rhythm, 3-2 counts on all the hitters," Washington said. "His sinker came into play and he started getting a lot of quick outs."
Harrison needed only eight pitches in the fourth inning.
"I didn't figure it out until I was warming up in the fourth," Harrison said. "From there I started locating my pitches better and the confidence grew."
Moreland's home run in the seventh inning came off Royals lefty relief specialist Jose Mijares, who had not yielded a home run to a left-handed hitter this season. Moreland hit an 0-2 slider out to right with Michael Young and Geovany Soto aboard.
"I was just trying to grind it out, foul off what I could, hang in there, until I got one," Moreland said. "It was an 0-2 count. I was trying to stay nice and easy, short to the ball and I think it helped a little bit in that situation."
Jeremy Guthrie (3-11) held the Rangers to three runs and six hits over six-plus innings. He is winless in three Kansas City starts since being acquired in a July 20 trade with the Colorado Rockies for Jonathan Sanchez and has not won since May 31 against Houston.
"That's the best start we've seen from him," Royals manager Ned Yost said. "He kept the ball down and he really matched Harrison pitch for pitch. That's a difficult task against their lineup and Jeremy almost did that."
The Rangers loaded the bases with one out in the first on a single by Ian Kinsler and walks to Elvis Andrus and Adrian Beltre, but scored only one run. Nelson Cruz's fly ball to Jeff Francoeur at the wall in right field brought home Kinsler. Guthrie threw only 11 strikes in 25 pitches that inning.
The Royals tied it in the second when they loaded the bases with no outs. Salvador Perez started it with a single, Francoeur walked and Eric Hosmer beat out an infield single. Yuniesky Betancourt, however, grounded into a double play with Perez scoring.
"I was able to make the pitch and get out of the second inning with only one run with the bases loaded no outs," Harrison said.
The Rangers took the lead in the fourth, which Beltre opened with a single, advanced to second on a wild pitch and scored on David Murphy's single. Murphy is hitting .396 with 32 RBIs in 53 at-bats with runners in scoring position.
Betancourt's two-out double in the eighth scored Francoeur with the final Royals run.
Alexi Ogando worked a 1-2-3 ninth, striking out two, for his second save in five opportunities.
"He blew them away," Washington said. "He's good in situations where he can let it all go. He let it all go, 97-98 (mph). He looked calm out there."
Rangers closer Joe Nathan was unavailable Friday and Washington said he would probably not use him Saturday after Nathan threw 62 pitches in working an inning each Wednesday and Thursday. He gave up four runs and four hits, including three home runs, in the appearances against the Angels. It was the first time this season Nathan had allowed earned runs in consecutive games. ... 3B Mike Moustakas was held out of the Royals lineup with a bone bruise on his right knee. Moustakas aggravated it Thursday sliding into second base against Cleveland. He first hurt his knee on a fielding play in the first inning July 28 at Seattle. ... RHP Scott Feldman, who starts Saturday for the Rangers, has won five straight decisions after starting the season 0-6. The Royals will counter with rookie LHP Will Smith.