The Twins moved a game in front of Chicago for second place in the American League Central, two games behind division-leading Detroit. Minnesota has won 14 of its last 16 home games.
Brian Duensing got the start for Minnesota after Francisco Liriano was a late scratch with swelling in his pitching forearm. Duensing allowed two runs on three hits over five innings, but the win went to Jesse Crain (3-4) after he threw two scoreless frames.
Joe Nathan put runners on second and third with two out in the ninth, then got Mark Kotsay to line out to right to end the game. It was Nathan's 29th save.
Casilla had an RBI double during Minnesota's two-run second, after which Chicago tied it on homers by Jayson Nix in the third and Carlos Quentin in the fifth.
Joe Crede drew a walk from Jose Contreras (4-10) to lead off the sixth and moved to second on a sacrifice by Carlos Gomez.
After Nick Punto was retired on a fly to left, Casilla stroked an 0-1 pitch to center to score Crede with the game-winning run.
Chicago lost for the sixth time in seven games.