Christian Roldan gave the Sounders the lead with a fine finish in the 40th minute, just as the rainfall began to make play difficult.
Passes along the ground soon became impossible as the ball stopped in puddles, but Villa still managed to take control and hit the crossbar in first-half stoppage time.
The former Spain striker then equalized from the penalty spot with his landmark 50th goal in the 53rd minute after the referee ruled Oniel Fisher tripped him up in a controversial decision.
And Villa added the winner in the 78th minute by running onto Jack Harrison's cross and placing a perfect volley past NYCFC keeperStefan Frei.
Villa reached 50 goals in just 78 games, the fifth-fastest player to accomplish the feat after Raul Diaz Arce, Carlos Ruiz, Roy Lassiter and Taylor Twellman. He leads all MLS players with 14 multi-goal games since he joined the league in 2015.
Chad Marshall's last-gasp header fell wide of the post as the Sounders lost a game in which they had led for the first time this season. NYCFC's four come-from-behind wins lead the league.
Jonathan Spector scored in the 94th minute to help Orlando City salvage a thrilling 3-3 draw with the Montreal Impact.
Orlando had led twice but fell behind 3-2 following quick-fire goals from Ignacio Piatti, before Spector rose highest to head in a late corner for a share of the points.
In the eighth minute, Kaka kept the ball from crossing the end line and fed Matias Perez Garcia for his first Orlando goal. But seven minutes later, Piatti stole the ball and set up Blerim Dzemaili to equalize for Montreal.
Carlos Rivas put the hosts ahead again in the 23rd minute by smashing home a rebound after Will Johnson's shot was cleared off the line.
In the second half, Piatti scored twice in a little over minute -- both times easily wrong-footing Spector -- to put Montreal in front, but it was Spector who had the final say.
Miguel Almiron and Josef Martinez scored in the second half to help Atlanta United secure a 3-1 win over Columbus Crew SC.
Hector Villalba had given Atlanta the lead in the 16th minute after Yamil Asad dispossessed Columbus' Josh Williams deep in his own third.
But Federico Higuain got the visitors back level 10 minutes later when Ola Kamara acrobatically touched the ball back to the Argentine, who rounded a defender before scoring.
The game stayed even until Almiron put Atlanta ahead in the 67th minute with an inch-perfect finish from 18 yards out for his eighth goal of the year.
Martinez then blasted in Atlanta's third from a tight angle in the 87th minute to secure the three points and lift expansion Atlanta into the Eastern Conference playoff positions, one point behind its opponent.
Romain Alessandrini scored in stoppage time as the LA Galaxy rallied to a 2-2 draw with the Houston Dynamo.
Alessandrini poked a cross past Bradford Jamieson in the fourth minute of injury time. The Dynamo pleaded for an offside call, but the goal stood.
From the top of the six-yard box, Mauro Manotas punched home the rebound of a shot by Demarcus Beasley to give Houston a 1-0 lead in the 22nd minute, but the Galaxy's Emmanuel Boateng side-stepped charging goalkeeper Tyler Deric and put a left footer into the open net to tie it going into halftime.
Alberth Elis, on the right flank, ran under a long, arcing pass from Boniek Garcia, raced past a defender and chipped in to put the Dynamo back in front in the 74th minute.
Los Angeles is unbeaten in its last seven, dating to a 3-0 loss at Seattle on April 23.
Houston is winless on the road this season.
Nemanja Nikolic scored his MLS-best 13th MLS goal and the Chicago Fire became the first team to win away to theNew England Revolutionthis season in a 2-1 victory.
Matt Polster found Nikolic with a long pass in behind the Revs' back line, and though his first shot was saved at the near post, the ball came back to him to score his third goal against New England this season.
Chicago then doubled its lead before the hour mark when Michael de Leeuw got a touch to a lobbed pass with his toe and the ball fell into the path of Luis Solignac to score.
The hosts got a goal back through Antonio Delamea Mlinar's close-range header -- his first strike in MLS -- but Chicago held on for the three points.
Jozy Altidore scored and Sebastian Giovinco set up both goals as Toronto FC beat D.C. United 2-0.
The game stayed level for nearly an hour until Altidore broke the deadlock. The U.S. striker ran onto a long Giovinco pass and used the outside of his boot to score past D.C. keeperBill Hamid.
Giovinco then supplied the corner from which Jordan Hamilton headed home with five minutes to play to wrap up the victory.
Toronto stayed atop the Eastern Conference table by a point over Chicago, while D.C. stayed rooted to the bottom.
San Jose Earthquakes goalkeeper David Bingham made a huge last-minute save to deny Sporting Kansas City's Graham Zusi and preserve a goalless draw.
Deep into stoppage time, Zusi carried the ball into the box and nutmegged an Earthquakes defender only to see Bingham push his shot inches past the far post.
Sporting KC keeper Tim Melia kept his ninth clean sheet of the season, the most in MLS.
Alan Gordon came on in the 80th minute and scored nine minutes later to give Colorado a 2-1 comeback victory over Portland.
Gordon headed in a cross over a defender for his second straight late winner in MLS play. He ripped off his jersey and went into the crowd to celebrate, for which he was given a yellow card.
On June 3, Gordon entered late and scored in the 86th in a 2-1 victory over the Columbus Crew.
Colorado tied it on Dominique Badji's fourth goal of the season in the 51st minute. Kevin Doyle threaded a pass between two defenders, and Badji chipped it over charging goalkeeper Jake Gleeson.
Sebastian Blanco gave Portland the lead in the 18th minute. The Rapids have won three straight MLS matches.
Cristian Techera scored on a free kick in the 74th minute to help the Vancouver Whitecaps tie FC Dallas 1-1.
Techera curled a left-footed shot over the wall and past goalkeeper Jesse Gonzalez from 30 yards out for the Uruguayan's fourth goal of the season.
The Whitecaps brought on 16-year-old Alphonso Davies, who made his debut for Canada in a friendly this week, with 30 minutes to go in hopes of sparking something, and his galloping runs seemed to inspire Vancouver before Techera struck.
Maximiliano Urruti scored for Dallas in the 52nd minute. He stole the ball from fellow Argentine Matias Laba in midfield and slotted home his eighth goal.
Yura Movsisyan scored a late goal as Real Salt Lake beat Minnesota United 1-0.
Movsisyan chipped in from point-blank range in the 84th minute. Justen Glad's header of a corner kick by Joao Plata was stopped by Bobby Shuttleworth, but the goalkeeper lost control of the ball and Movsisyan poked home his fifth goal of the season.
Shuttleworth had a season-high eight saves, his most since recording nine for New England in a 0-0 draw at Portland on May 2, 2013, as Real Salt Lake outshot Minnesota 29-5.
Salt Lake allowed 11 combined goals in its last two matches with goalkeeper Nick Rimando on international duty. The 38-year old returned Saturday and, despite making just one save, improved his MLS career regular-season records for shutouts (133) and saves (1,488).
Minnesota has lost two in a row and four of its last five.
Real Salt Lake's Kyle Beckerman, on warning from the MLS Disciplinary Committee, was shown a yellow card and will be suspended next match.
NYCFC 2-1 Seattle: Villa sparks comeback
NYCFC had star man David Villa to thank for their three points against Seattle, as his brace turned around a 1-0 deficit.
Orlando 3-3 Montreal: Lions draw at the death
Jonathan Spector scored from a header late in stoppage time to save Orlando City from defeat at home against Montreal.
Atlanta 3-1 Columbus: Stars shine in Georgia
Miguel Almiron scored a stunner and Josef Martinez had a return to remember as Atlanta United dominated Columbus.
LA Galaxy 2-2 Houston: LA level late
Romain Alessandrini buried a controversial goal late in stoppage time to earn LA Galaxy a point against Houston.
New England 1-2 Chicago: Fire burn Revs
The Chicago Fire were lethal on their few chances in New England, while the Revs wasted a bevvy of opportunities at home.
TFC 2-0 D.C. United: DP's make a difference
Giovinco, Altidore, and Bradley all had an incremental hand in sparking Toronto to a crucial 2-0 win over D.C. United.
San Jose 0-0 Sporting KC: Zusi denied
San Jose and Sporting KC saved all the action for the 94th minute, when David Bingham denied Graham Zusi a golden goal.
Rapids 2-1 Timbers: Gordon's late heroics
Trailing 1-0 at the half, Colorado scored two second-half goals, thanks in large part to a trademark late Alan Gordon goal.
Vancouver 1-1 FC Dallas: Honors even in Cascadia
Chances were sparse between Vancouver and Dallas, with a pair of individual efforts the lone difference in the match.
Real Salt Lake 1-0 Minnesota: RSL score late
Bobby Shuttleworth kept RSL at bay for 83 minutes, but his own mistake allowed the hosts to capitalize and beat Minnesota.