Castillo got things off to a good start when he singled to open the game. He moved to second on a Michael Cuddyer walk and then scored when Torii Hunter singled to left field.
The Rangers answered in the bottom half of the inning. Texas also got its leadoff batter on base when Kenny Lofton doubled off Twins starter Boof Bonser. One batter later, Mark Teixeira doubled to center field to knot the score at 1.
Castillo again sparked the Twins in the second. Luis Rodriguez walked, and Chris Heintz singled. Rodriguez moved to third on an error by Texas catcher Chris Stewart before Castillo roped a base hit to right field to move Minnesota back in front.
"He's basically been our hottest hitter as of late," Gardenhire said of Castillo. "Right now he's swinging so good I'm trying to get him to keep swinging. He gets us going."
Another Twin swinging a hot bat is Morneau. After sending two souvenirs into the bleachers on Tuesday, the first baseman launched Texas starter Robinson Tejeda's first pitch of Wednesday's third inning into the right-field seats, extending the lead to 3-1.
"I like playing here," Morneau said about Rangers Ballpark. "The ball carries pretty well. You don't feel like you have to go up there and try to muscle anything. The wind seemed like it was carrying out to right-center a bit, so just put it up and it's got a good chance to go."
Teixeira again put the Rangers on his back in their half of the third. Lofton had reached base on a single and stolen second before Teixeira's hit to right field cut the Minnesota lead to 3-2.
After three innings, the teams suspected they might be in for a lengthy day.
"I looked up and we're not through three innings, and there's men on base and there's already 150 pitches thrown," Gardenhire said. "I'm going, 'What are we going to do here?' That's not the pace of the game that I think either team likes."
The pace picked up, though, but not before the Twins scored again in the fourth. Punto recorded one of his three walks, and Castillo moved him to third on a single to center. C.J. Wilson entered the game in relief of Tejeda, and he surrendered an RBI single to Jason Tyner.
Tyner later moved to third on a Morneau single and scored on a Wilson wild pitch, leaving Minnesota ahead 5-2.
Bonser then retired six of the next eight batters, thanks in part to a highlight reel catch at the wall by Hunter on a Michael Young fly ball that left Bonser pumping his fist. Bonser left the game after five innings, having allowed two earned runs on six hits with six strikeouts and a pair of walks.
"I battled today," Bonser said. "I didn't really have much command of everything, but I kept the team in the game and we pulled out another win."
The bullpen took over for Minnesota, and at times, it made things interesting for the home fans.
Matt Guerrier replaced Bonser and worked two innings in which he allowed two hits. Juan Rincon entered the game in the eighth, but he didn't make it out of the inning.
After initially striking out Ian Kinsler, Rincon allowed Ramon Vazquez to reach and then move to second on a wild pitch. Rincon struck out Matt Kata, but then pinch-hitter Frank Catalanotto singled Vazquez home. Lofton followed with another single, and the Twins turned to Pat Neshek, who enticed Young to line to Hunter in center field to end the threat.
Joe Nathan took over in the ninth and surrendered a single to Teixeira, but he coaxed Victor Diaz into a 6-4-3 double play to quiet the home crowd. However, Nelson Cruz then doubled. And a walk to Kinsler brought Sammy Sosa to the plate as a pinch-hitter with two outs and two on. Nathan won the battle, though, getting Sosa swinging to end the game and earn the save, his ninth of the year.
"I've faced him before," Nathan said of Sosa. "You've got to be careful. Fortunately, today I was able to get ahead of him and got him with a slider."
The Twins get a day off Thursday before opening a six-game homestand with the Blue Jays on Friday.