Greinke (4-8) won for the third time in four starts. He sailed into the eighth with a 7-1 lead, but a pinch-hit, bases-loaded triple by Brent Lillibridge keyed Chicago's comeback.
Soria relieved Greinke to begin the ninth and closed for his 20th save in 22 opportunities.
Butler's 422-foot solo shot in the first stopped Jake Peavy's scoreless string at 21 2-3 consecutive innings, the longest active streak in the majors.
Butler added an RBI single and Guillen hit a three-run shot in a four-run seventh as the Royals took two out of three from the White Sox. Chicago, which had had won six straight series during a 16-3 surge, has lost three of four since an 11-game winning streak.
Omar Vizquel's one-out triple in the fourth nudged the 21-year veteran past Luis Aparicio for second on all-time among shortstops with 2,675 hits. Alex Rios followed with an RBI single that tied it 1.
Peavy (7-6) was charged with three runs on seven hits in six innings, with two walks and five strikeouts. The loss ended a three-game winning personal winning streak for the veteran right-hander.
Greinke ran into trouble in the eighth when four straight singles made it 7-2. The triple by Lillibridge and an RBI grounder by Alex Rios trimmed the lead to a run. Greinke gave 10 hits, with no walks and three strikeouts.