Millwood pitched his second straight complete game and the Rangers scored two unearned runs in a 2-1 win Tuesday night.
Throwing errors by Miguel Olivo and Mike Aviles led to the Rangers' runs. The Rangers went 1-for-15 with runners in scoring position, stranded 10 runners and grounded into a double play.
"We had a lot of chances that we didn't do anything with," Rangers shortstop Michael Young said. "We had a chance to really give Milly a cushion and didn't take advantage of it. Fortunately, he's one of the most mentally tough guys I've ever played with, so he doesn't let that kind of stuff faze him."
With the score tied at 1, Milton Bradley led off the Rangers' eighth with a walk and Brandon Boggs ran for him. Hank Blalock reached on an infield single, and when Olivo's errant throw to first went down the right-field line, Boggs scored from first.
"You've got to win anyway you can," Rangers manager Ron Washington said. "I'm just glad it wasn't us making them (errors)."
Said Olivo, "I think I went too quick. I go full speed and I threw the ball and try to make a play. I did not see (Ross) Gload on first base and I just let it go."
Millwood (8-7), who pitched a complete game in defeating Detroit in his previous start, held the Royals to nine hits, eight of them singles, while striking out two and walking none. Millwood, 2-0 in three starts against the Royals this season, tossed his third complete game of the season and the 17th of his career.
"Those guys were aggressive and I was throwing strikes early and they just started swinging the bat," Millwood said. "My fastball command was not that great, but I thought it was moving great. We made a few plays that were outstanding and helped me out.
"I feel my mechanics are as good or better than it has been all year. I've got a little bit of confidence working and that's huge."
The Rangers traded closer Eddie Guardado to the Twins on Monday, giving the job to Frank Francisco, who has never saved a major league game. In a tight one, Washington elected to stay with Millwood.
"Kevin was outstanding," Washington said. "He stayed off the fat part as many bats as he possibly could. He used his fastball in and out, getting ahead of hitter and he made pitches when he had to. He didn't waste any pitches. He hasn't made a mistake in two games, 18 innings."
The Royals threatened in the ninth with singles by Billy Butler and Olivo, who had three hits. Millwood, however, retired pinch hitter Esteban German on a fielder's choice grounder to shortstop Young to end the game.
The Royals have lost 16 of 19 and have been outscored 123-54 in that span to fall a season-worst 20 games below .500.
"It was obviously untimely errors and unable to do anything both from the mound and defensively to keep those runs from coming in," Royals manager Trey Hillman said. "They're going to find a way when you give then extra outs and it bit us both times."
Ramon Ramirez (2-2), the second of three Kansas City pitchers, took the loss, giving up the unearned run and three hits in two innings.
Royals starter Zack Greinke, who is 0-2 with two no-decisions since an Aug. 3 victory against Chicago, held the Rangers to one unearned run and four hits before departing after six innings.
"I let people get on base and then had to work real hard to stop it," Greinke said. "I made a bunch of mistakes, it's just when they capitalize on it, you notice it more. I made a lot they didn't capitalize on."
Joaquin Arias led off the game by reaching on Aviles' throwing error and eventually scored on Bradley's sacrifice fly.
The Royals got on the board in the fifth when Olivo's two-out doubl to left scored Butler, who had singled.
The Royals' last loss when not giving up an earned run was Sept. 6, 1998, at Anaheim. ... Arias has hit safely in six of seven games since being called up and has back-to-back multihit games. ... Aviles has a nine-game hitting streak; he is 15-for-37 in that span.