Erling Haaland netted a first-half brace for Manchester City, taking his Champions League tally to 52 goals in 50 appearances.
Jordan Teze equalised for Monaco with a superb strike after Haaland's first goal, with the French side twice coming from behind.
The decisive penalty was awarded following a VAR review of a collision between Dier and Nico Gonzalez, where Gonzalez appeared to get the ball but also struck Dier in the face.
Manchester City hit the crossbar twice through Phil Foden and Tijjani Reijnders, failing to extend their lead and ultimately costing them the win.