"It seemed like the balls just bounced our ways tonight," left fielder Carl Crawford said.
Nowhere was that more apparent than in the eighth inning. With one out and Akinori Iwamura on first, Upton popped up into shallow right field. Royals second baseman Mark Grudzielanek and right fielder Jose Guillen -- who said he pulled his groin earlier in the game -- both misplayed the ball, which fell between them.
Upton ended up with a double, and Iwamura advanced to third.
Next up was Crawford, who hit a fly ball down the left-field line that Esteban German was unable to catch in foul territory, again prolonging the inning. One pitch later, Crawford laced a two-run triple.
It was his second triple of the game. He needed a night like this, as he was hitting .227 in July and had not tripled since June 21.
With the win, the Rays extended their lead in the American League East over the Red Sox to two games, with the surging Yankees one game behind Boston.
Nonetheless, manager Joe Maddon harped on a few negatives from Saturday.
Closer Troy Percival had a shaky ninth inning, made less consequential by Carlos Pena's solo shot in the top half of the frame. And on Upton's unconventional double, Iwamura may have been able to score had he ran at full speed.
"If we're going to win this thing, we can't make plays like that," Maddon said. "He just didn't run hard enough."
Before the storm hit in the middle of the fifth -- causing a one-hour, 13-minute delay -- Tampa Bay led, 2-1. Kansas City quickly tied it up in the bottom of the fifth on Guillen's RBI single to right. That was all the scoring until the eighth.
Pena homered in the ninth inning for the second consecutive night.
"As often as we could get it, I'll take it," Maddon said.
Pena has been a bona fide Kansas City killer, hitting .393 with four home runs against the Royals this year and blasting 15 homers against them over his career.
Starter Scott Kazmir left with a no-decision. Through four innings, he'd allowed one run of five hits and had tossed 69 pitches. Then the rain came.
Maddon had Kazmir throw at intervals in the batting cage during the delay, allowing him to send the southpaw back out there after the long layoff.
"It was almost like a real game," Maddon said.
Kazmir retired the first two batters in the fifth, but then, he struggled. Grudzielanek doubled, his third of the game, and Guillen hit a single.
That run tied the game, but Grudzielanek and Guillen would help give the lead back with their mishap in the eighth.
"We have to beat everybody to the punch," Maddon said. "We just got lucky tonight."
Mark Dent is an associate reporter for MLB.com. This story was not subject to the approval of Major League Baseball or its clubs.