Dominque Badji also scored in the second half for the Rapids (5-8-1), who remain unbeaten in June and won in goalkeeper Tim Howard's return to the team. Howard played two World Cup qualifiers for Team USA.
Gordon gave the Rapids the win when he battled in front of the net and headed a crossing from Mohammed Saeid past Portland goalkeeper Jake Gleeson.
Sebastian Blanco scored for Portland (7-4-5), which has dropped two straight.
Blanco had given the Timbers the lead when dribbled unimpeded deep into Colorado's end, carried the ball into the box and lost defender Micheal Azira. Howard never moved when Blanco blasted a shot to the top far corner in the 18th minute to give the Timbers the critical first goal.
Blanco nearly made it 2-0 in the 39th minute with a shot from 35 yards, but Howard made a fingertip save.
Howard made another big save on Blanco in the 49th minute, and the Rapids cashed in on a chance when Kevin Doyle led Badji perfectly, and he chipped a shot over Gleeson in the 51st minute to tie it at 1.
The Rapids kept up the pressure, with Gleeson needing big saves on Doyle's header in the 59th minute and his low shot in the 74th minute.
The Rapids broke the tie with Gordon's goal. It was the 14th time in his MLS career he has scored in the 80th minute or later. He shed his uniform and went behind the net to celebrate with fans.
The Rapids played without forward Shkelzen Gashi, who was out with a hamstring injury.