The veteran right-hander tossed eight scoreless innings and simply out-pitched left-hander Francisco Liriano to end Chicago's four-game losing streak.
"It was not a good day for us," Twins manager Ron Gardenhire said. "The story of the day was Dempster. He pretty much shut us down with an assortment of pitches. We couldn't even figure out what one was because it kept jumping at us. He really threw the ball well and shut us down."
Dempster gave up just four hits and a walk, while striking out six, including Joe Mauer a season-high three times.
"I just try to go out there and battle against a really hot team -- they're swinging the bat really well," Dempster said. "We were able to put some more runs on the board and then some more runs and avoid a sweep and we're able to get on the plane ride and enjoy the ride home."
Liriano, meanwhile, pitched well himself until it unraveled in a three-run sixth inning.
The Cubs scored a run in the first inning on a two-out RBI double by Alfonso Soriano off the glove of Josh Willingham.
But Liriano cruised through the next four innings before running into trouble in the sixth. Reed Johnson led off with a walk before Starlin Castro promptly doubled. David DeJesus brought home a run with a groundout before the Twins opted to intentionally walk Soriano.
Liriano was able to strike out Jeff Baker, but then threw a wild pitch to allow Castro to score from third before giving up an RBI double to Joe Mather to score Soriano.
"I walked a guy and it seems like every time I walk a guy he comes around to score," Liriano said. "And Castro is a good hitter -- I made a good pitch -- but he just hit it the other way. Then the wild pitch and the couple walks got me."
That it was it for Liriano, who ended up surrendering four runs on four hits over 5 2/3 innings with six strikeouts.
So while his pitching line wasn't great, it was still an improvement from the way he was pitching to start the season, when he was demoted to the bullpen after posting a 9.45 ERA in his first six starts.
Since returning from the bullpen on May 30, Liriano has a 2.55 ERA in three starts with 23 strikeouts in 17 2/3 innings.
"The last two starts he's had good success and confidence with what he's doing," catcher Drew Butera said. "So I think once you gain some of that, he picked up the pace and continued with that."
The Cubs added two insurance runs in the eighth against reliever Jared Burton, who didn't aid his cause with a throwing error to second base while attempting to turn a potential double play. Baker brought home the first run on a sacrifice fly and Darwin Barney added an RBI single.
The Cubs added two more runs in the ninth on a two-run double by DeJesus before the Twins scored their two runs in the ninth inning on a Ryan Doumit sacrifice fly and a Jamey Carroll RBI double against reliever James Russell.
The loss was just Minnesota's third over its last 12 games, as the club has still won four straight series.
"It got a little out of hand there but it's still a good series," Gardenhire said. "We took two out of three so we have to take it. We had a chance to sweep it but they played a lot better than we did today."