The Nationals rallied for three runs in the ninth inning off Seranthony Dominguez to tie the game at 6-all. Soto, who hit a two-run shot in the fourth, connected off Yacksel Rios (3-2) with one out in the 10th for the winner.
In the first game, Spencer Kieboom hit his first major league home run after losing a tooth earlier in the day, Erick Fedde pitched shutout ball into the sixth inning and the Nationals beat Phillies 3-1.
The doubleheader was needed once Monday's night's game was postponed because of poor field conditions from weekend rain. The grounds crew used blow torches to dry a field that had not been covered with a tarp and players described as "spongy" and "soft."
It's the Phillies who are stuck in the mud.
The Phillies, who were 15 games over .500 in early August and in the thick of NL playoff race, have lost four straight games and are 6-16 since Aug. 18. They began the day five games behind Atlanta in the NL East.
The second game ended 8 1/2 hours after the first pitch in the opener -- and with only a smattering of fans at the park each time.
The Phillies seemed poised to win the nightcap and get some sort of spark going to stay in the NL playoff picture. They scored five runs in the fourth inning off starter Tanner Roark, and Jose Bautista hit a solo shot in the eighth to make it 6-3.
But Dominguez failed them and manager Gabe Kapler let his closer labor through 43 pitches before pulling him. With 20 active pitchers, Kapler nearly gave them all a turn during the day -- except when Dominguez needed help.
The Phillies loaded the bases in the ninth but the rally was snuffed when Bautista flied out.
The Nats had reason to smile -- even if Kieboom, a rookie catcher, was missing a tooth. Kieboom is waiting on veneers and lost half a temporary tooth earlier at breakfast when he bit into a baguette. The other half was stuck in his gums.
He looked as if he spit out a tooth while he walked to the plate in the fifth in the opener. It was just a big spitball. He pointed to the gap as he jogged back to the dugout after the solo homer.
"I just popped it off," he said, laughing. "I've got to roll with this for a little while but that's fine. The Caps, those boys play with no teeth. I can play with no teeth."
Phillies starter Nick Pivetta (7-12) was one of seven pitchers to work the opener.
Fedde (2-3), making his second start since he missed two months with a sore right shoulder, tossed one-hit ball through five.
The late afternoon start resulted in a sparse crowd for the first pitch. The 40-plus-person Phillies contingent in front of the dugout for the national anthem was larger than the bunch of fans in the upper deck.
"One thing that we continue to focus on is who can perform best under sub-optimal conditions," Kapler said. "So optimal conditions are a packed house and really fired up and energetic and suboptimal conditions are when you have more challenging situations. And I think today was a more challenging situation and we always challenge our guys to do the best under those circumstances that they possibly can."
Phillies 3B Maikel Franco flipped over a railing and into the dugout chasing down a foul ball in the eighth inning of the nightcap. Franco left the game.
The Phillies have played four doubleheaders this season, their most since 2011. They've played three at Citizens Bank Park since the All-Star break.
MOVING ON UP
The Phillies recalled RHP Drew Anderson, RHP Enyel De Los Santos and LHP Ranger Suarez from Triple-A Lehigh Valley.
It's a doozy: Washington sends RHP Stephen Strasburg (7-7, 4.04 ERA) to the mound against RHP Aaron Nola (16-4, 2.29).
MORE NATIONALS NEWS