Bayern var dominerande tidigt när Thomas Muller slog från Dantes pass innan Mario Gotze gjorde efter ett hörn.
David Silva drog ett mål tillbaka från nära håll efter Jesus Navas kors.
Aleksandar Kolarov utjämnade med ett straff efter att James Milner snubblades innan Milners fina slut vann det.
Bayerns senaste tre hem nederlag i europeisk konkurrens har kommit mot engelska klubbar - Manchester City, Arsenal och Chelsea
Det var en fantastisk vändning från Manuel Pellegrini sida, som nästan förtjänat 4-2 seger de behövde gå igenom som grupp vinnare som Alvaro Negredo hade en sen insats sparad av Bayern målvakt Manuel Neuer.
Men efter att Bayern gjorde mål två gånger i öppningen 12 minuter, det faktum att staden kämpade tillbaka för att hävda en oväntad seger kommer att ge dem förtroende när de går vidare till de sista 16 för första gången.
Även om Bayern och City båda slutade med 15 poäng, den tyska sidans 3-1 seger under den första gruppmatchen i Manchester innebar deras bättre målskillnad visade sig avgörande.
Båda lagen hade redan kvalificerat sig innan detta spel men Bayern boss Pep Guardiola var klart att efterbehandling andra i gruppen - och därmed inför ett frö lag i den första knockout runda - var "inte ett alternativ".
Men hans team såg sårbart ut eftersom de bara led sitt tredje nederlag 2013 med Silva och Milner utmärkt hela tiden.
Mediauppspelning stöds inte på den här enheten
Det började med tyskarna i ogenomtränglig form när City såg nervös efter en tidig förväxling mellan Joleon Lescott och återkallade målvakt Joe Hart.
Efter fem minuter blev besökarna ogjorda när Dantes diagonalpass fångade Kolarovs tupplur och Muller nickade in bakom stadskaptenen för att avsluta förbi Hart.
Hart var tvungen att spara Dantes huvud och vände Riberys ansträngningar på posten efter ett annat Lescott misstag innan Bayern gick 2-0 upp från det resulterande hörnet.
Mario Mandzukic hade tid att skjuta mot mål och hans ansträngningar hittade Gotze, som också hade utrymme att slå bollen förbi Hart från närområdet.
I detta skede var den enda frågan hur många mål Bayern skulle göra. Hart hade gjort fyra touchs, och två av dem skulle plocka bollen ur nätet.
Saker verkade förvärras när Micah Richards ersattes till höger av Pablo Zabaleta efter att ha dragit en hamstring men introduktionen av den erfarna argentinska verkade galvanisera besökarna.
Källa: Uefa CL-förordningar
Strax efter en anständig passage av lek, tog City ett mål tillbaka. Silva, när han återvände till laget efter en kalvskada, instoppad efter att Milner hade lett Navas högra centrum tillbaka över målet.
Efter en frenetisk första halvlek fortsatte staden att förbättra sig, men inom tre minuter på vardera sidan av timmarkeringen vände spelet sedan på huvudet.
Silva var arkitekt när han spelade i Milner, som fördes ner av Dante i straffområdet. Kolarov skickade Neuer på fel sätt från 12 meter.
Spanska midfielder Silva sedan sätta Navas fri ner till höger och Milner rullade en vacker skott in på baksidan post efter Bayern Jerome Boateng hade missat korset,
Substitute Negredo kunde ha gjort det till en perfekt kväll när Neuer räddade sitt skott innan Pellegrini valde att sätta på Jack Rodwell istället för Sergio Aguero som de jagade ett fjärde mål.
Oavsett vad gruppen placerar, var detta ett otroligt sätt för staden att böja sina muskler innan värd Premier League ledare Arsenal på lördag.
För att se ett galleri av bilder från dagens Premier League spel gå till BBC Sport Facebook sidan
Manchester City iscensatte en fantastisk comeback för att avsluta Bayern Münchens rekordkörning av 10 på varandra följande Champions League vinner men de fortfarande avslutade som Grupp D löpare-up bakom de tyska mästarna.