The FA Cup finalists looked on course for a potentially decisive win in their pursuit of a top-four place as Yaya Toure put them ahead.
The visitors squandered several chances to make victory safe and were stunned when former City defender Distin equalised and in-form Osman grabbed a winner.
City asserted themselves early and David Silva was the orchestrator when the deadlock was broken after 28 minutes, although he benefited from a lucky ricochet as he took the ball past Distin. He then found Toure unmarked to his right and he powered forward to score.
City remained in control but they paid the price for their profligacy as Everton equalised in the 66th minute through Distin. From a Mikel Arteta free-kick, Distin rose at the far post to power a header into the bottom corner.
The goal infused Everton and the Toffees grabbed a second in the 72nd minute. Phil Neville delivered an inviting cross into the area and Osman timed his leap superbly, beating Kompany in the air and glancing a looping header over Joe Hart into the top corner.
Source: PA
Source: PA