Having stumbled once again in the Champions League in midweek against Ajax, the out-of-sorts reigning champions fell behind to Steven Caulker's first-half header.
But Sergio Aguero hauled them level before substitute Edin Dzeko hooked in the winner two minutes from time.
There was a fright for City's defence early when Aaron Lennon and Emmanuel Adebayor threatened and worse was soon to follow.
Caulker (20) was allowed space to stoop and head Tom Huddlestone's free-kick past the scrambling Joe Hart from six yards, with an uncharacteristic fumble from the City keeper seeing Spurs in front.
City appealed in vain for a penalty for a handball by Willam Gallas before Huddlestone's low thump whistled past the post.
Aleksandar Kolarov's dink floated wide of the far post while Huddlestone's unpunished penalty box body check on Pablo Zabaleta further incensed the home support.
Neither Carlos Tevez nor Zabaleta could seriously test Brad Friedel when given clear sights of goal as City struggled for rhythm.
There was further anguish as Aguero fell over his own feet having broken clear but his aim was true (65) as he coolly slotted past Friedel after getting the break of the ball.
Bale then blazed over and the Welshman took advantage of more defence hestitancy to blast one straight at Hart from 16 yards.
But it was the Tottenham goal that came under siege in the final quarter; Dzeko heading past the upright and Silva firing wide after a jinking run.
Aguero was again denied by Friedel as the tension mounted but the Tottenham keeper was helpless as Dzeko latched onto Silva's clever pass to save the day.