Boston snapped a five-game winning streak following a three-game sweep of Tampa Bay.
Bannister (4-3) gave up three runs on nine hits and struck out four while winning his third straight. He won for the first time in five decisions against the Red Sox. Joakim Soria pitched a perfect ninth for his 12th save.
Daisuke Matsuzaka (3-2) continued his up-and-down season with a shaky performance, walking a season-high eight while allowing three runs over 4 2-3 innings.
Matsuzaka narrowly missed a no-hitter in his last start in Philadelphia that was broken up with two outs in the eighth.
After working his way out of a bases-loaded jam with no outs in the fourth inning without allowing a run, Matsuzaka completely fell apart in the fifth.
He walked five batters — a career high — in the inning, sandwiched around an RBI single by DeJesus.
The Royals added two more runs in the inning. Billy Butler scored on a wild pitch and an RBI walk by Jose Guillen. Joe Nelson relieved Matsuzaka and retired Jason Kendall to end the Royals threat, but not before the Royals built a 3-1 lead.
Boston went ahead 1-0 in the fourth inning on an RBI single by Adrian Beltre that was set up when J.D. Drew's double-play grounder bounced up and hit second-base umpire Paul Schrieber on the chest.
Bill Hall led off the fifth inning with his fourth home run of the season to cut the Royals' lead to 3-2, but DeJesus increased the lead for K.C. to 4-2 when he doubled off the left field wall to drive home Mike Aviles in the sixth.
Jason Varitek added an RBI double in the bottom half of the sixth.
Notes: Joe West was the home plate umpire. It was his first game at Fenway Park since complaining about the length of games between the Red Sox and Yankees. Time of game was 3 hours, 3 minutes. ... Youkilis has now reached base in 26 consecutive games.