The substitute completed a counterattack started by Declan Rice in the 89th minute to send West Ham three points clear of the relegation zone with six games remaining.
“This season so many things have not gone our way,” said Michail Antonio, who started as West Ham’s lone striker. “But today it didn’t stop us, we just kept going, and we got the victory.
“It was hard, they play unbelievable football, and they kept pinning us in. It is a massive result.”
It had looked like being a night of frustration for David Moyes’ side, which was denied an opener after a lengthy VAR review. That was followed at the other end by conceding a penalty that was converted by Willian.
Although Tomas Soucek leveled in first-half stoppage time and Antonio put the hosts in front at the start of the second half, Willian looked like recovering a point for Chelsea when he netted for a second time in the 72nd minute.
With the loss, fourth-place Chelsea is now only two points ahead of Manchester United and Wolverhampton in the pursuit of Champions League qualification.
It halted Chelsea’s momentum after beating deposed champion Manchester City last Thursday and then reaching the FA Cup semifinals by eliminating Leicester on Sunday.
They couldn’t blame a hostile atmosphere, though, as more than 60,000 seats were empty at the Olympic Stadium due to the coronavirus pandemic restrictions.
But the wait for a VAR ruling seems even longer when the stadium falls completely silent — as it did in east London for more than three minutes after Soucek’s celebrations were curtailed.
Souček scrambled the ball into the net after connecting with a corner from Bowen in the 34th minute. But the VAR ruled that Antonio, who was flat on the ground looking away from goal, was in an offside position and obstructing the view of Chelsea goalkeeper Kepa Arrizabalaga.
The lengthy delay to assess the footage showed it wasn’t a clear decision to make, which only deepened the West Ham irritation.
“I was angry,” Moyes said. “Too many small decisions had gone against us. It didn’t feel right at the time.”
But the coaches and players are told to maintain social distancing rather than confronting match officials.
Play resumed and soon there was a penalty ruling that went against West Ham and survived a VAR review when Christian Pulisic’s fell over after being caught by Diop. Willian converted from the penalty spot to compound West Ham’s frustrations.
But in stoppage time, Chelsea was beaten at another set piece as Souček headed in from Bowen’s corner.
Chelsea was picked apart again six minutes into the second half, with a slick move down the left.
Declan Rice played a one-two with Pablo Fornals before passing to Antonio on the edge of the penalty area.
Antonio was nudged over by Antonio Rüdiger but, rather than appealing for a penalty, he got back up on his feet. As the ball was recycled, it found its way to Bowen on the right and he squared for Antonio to slide it into the net.
Chelsea equalized when Willian’s free kick hit the inside of the post and beat the outstretched goalkeeper Łukasz Fabiański.
Pulisic thought Fabianski had been beaten again with a low shot but it crept wide of the post. The miss proved costly.
Rice seized possession on the edge of his own area and launched a high pass to Antonio on the halfway line. The ball was sent crossfield to Yarmolenko, who cut past Rüdiger and struck into the bottom corner.