- Stream ESPN FC Daily on ESPN+ (U.S. only)
- Don't have ESPN? Get instant access
- Dawson: Man City show character to keep title in their hands
Pep Guardiola's side hold a four-point lead at the top of the table while Liverpool have a game in hand.
"It's in our hands, that's good," Guardiola said in his postmatch interview. "It would have been perfect to win today but West Ham is fighting for Europa League and have had an incredible season.
It's so complicated to attack them and play against them, so difficult. [It was a] great comeback. I think we played a really good game. They are so good in the transitions.
"But we spoke at half time, 'Don't give up. Score one goal and we'll be in the game.' Fortunately, we scored earlier in the second half and afterwards we had one chance... fair result."
The hosts had the first chance of the game inside three minutes when an unmarked Craig Dawson headed over from close range.
It was a crucial moment as West Ham scored less than 10 minutes later when Bowen beat the offside trap, skipped past Ederson and produced a fine finish into the far corner.
On the stroke of half-time, West Ham doubled their lead as Bowen raced in behind City's defence again and slotted past the goalkeeper.
City responded well and grabbed a goal back four minutes into the second half through Grealish's deflected effort.
The visitors started to dominate possession but West Ham had the better chances to restore their two-goal lead.
Bowen almost made the most of a defensive mix-up but hit the side netting while Michail Antonio missed when one-on-one with Ederson.
However, City equalised after 69 minutes when Coufal headed into his own net from Mahrez's free kick.
With five minutes remaining, City were awarded a penalty after a VAR check as Jesus was brought down by Dawson inside the area.
Mahrez stepped up but the penalty was saved by Fabianski as West Ham managed to hold on for the point.