Harrison, the first overall pick of the 2016 MLS SuperDraft, attacked space and his left-footed attempt from 20 yards deflected off Real Salt Lake defender Justen Glad and past flat-footed goalkeeper Nick Rimando to give NYCFC (4-5-6) a 1-0 lead in the 56th minute.
The visitors equalized three minutes later when Yura Movsisyan ran onto a ball from Sunny, cut inside of Jason Hernandez and scored from 14 yards out.
Juan Manuel Martinez put Real Salt Lake (7-4-2) in front in the 67th minute when he latched onto an attempted headed clearance by Andoni Iraola of a Javier Morales free kick and put his shot in off RJ Allen.
Moments after Mix Diskerud put a diving header just over the crossbar from the edge of the six-yard box, RSL doubled their advantage courtesy of an own goal in the 74th minute.
Villa pulled NYCFC within a goal from the penalty spot in the 87th minute after it was ruled Kwadwo Poku was taken down from behind by Morales. It was his league-leading 10th goal of the season and 10th penalty kick converted in 12 attempts.
Villa nearly equalized four minutes into second-half stoppage time, but he put his attempt from the right of the net just wide.