Brenton Doyle added two hits, Jake Bird (3-3) got the win in relief and Justin Lawrence put two on with two outs in the ninth before striking out Nico Hoerner to earn his 11th save of the season for Colorado (52-92).
Seiya Suzuki homered and finished with three hits and Dansby Swanson and Hoerner each had two hits for Chicago (78-68). The Cubs missed a chance to get within a half-game of Philadelphia for the first National League wild card and fell four games behind first-place Milwaukee in the NL Central.
Bryant, who came off the injured list on Monday, broke a tie with a solo homer in the sixth off Daniel Palencia (5-2). It was his ninth home run of the season.
Doyle extended the lead in the seventh with an RBI single to center.
The Cubs went ahead in the second inning against Colorado starter Chris Flexen. Swanson led off with a triple and scored on Suzuki's single up the middle. Suzuki moved to third on a single by Yan Gomes and scored on Pete Crow-Armstrong's fielder's choice to make it 2-0.
The Rockies broke through when they sent nine men to the plate in the fourth. Chicago starter Javier Assad loaded the bases with two walks and a hit batter to start the inning and, after Charlie Blackmon popped out to short, Bryant's check-swing, two-run single to right field tied the game.
Luke Little relieved Assad and Doyle scored on a groundout by Nolan Jones and Bryant scored on Diaz's single to make it 4-2.
Assad allowed four runs on five hits and walked four in 3 1/3 innings. He fanned four.
Chicago responded in the sixth when Swanson reached on a one-out single to chase Flexen and Suzuki hit a two-run homer off Bird to tie things at 4-4.
Flexen allowed three runs on nine hits in 5 1/3 innings. He walked two and struck out five.
—Field Level Media