The Crew were headed for a third straight loss until Zelarayan ripped a shot from 35 yards that skimmed the underside of the crossbar to make it 1-1.
The winner came from 19 yards with a curling shot.
New York City got an 18th minute goal by Ismael Tajouri-Shradi but had its run of two wins and two ties end.
The Crew won on the road for the first time in 16 matches (1-8-7) since winning 3-1 at Atlanta United on Sept. 14, 2019.
Columbus has scored five goals this season, including three by Zelarayan, the 2020 MLS Cup MVP, and two D.C. United own goals.
The match was the first of eight home games for New York City at Red Bull Arena instead of Yankee Stadium because of scheduling conflicts.
Tajouri-Shradi opened the scoring on the transition after a Crew turnover at midfield. Valentín Castellanos dribbled into the box then sent the ball back to Tajouri-Shradi on the run for a shot from 18 yards to the bottom right corner for his first goal of the season.
Room came up big again just before the half with a kick on a try by Gudmundur Thórarinsson from the left side of the box as the shots favored New York City 13-2 and shots on goal were 3-0 through 45 minutes.
Room made three saves. Counterpart Sean Johnson had one.
The Crew will be home to play Toronto on May 29, the same day New York City plays at Los Angeles FC.