Na in de jeugd voorIFK Velen enTorsby IF gespeeld te hebben, maakte Berg in 2003 de overgang naar de jeugdafdeling vanIFK Göteborg. Bij die club debuteerde hij in 2005 in deAllsvenskan, de hoogste divisie van Zweden.
In augustus 2007 tekende hij voor vier seizoenen bij het NederlandseFC Groningen, als vervanger van de naarAFC Ajax vertrokkenLuis Suárez. Berg was op dat moment topscorer in de Zweedse competitie. Hij was op dat moment de duurste aankoop ooit van de Groningers én de duurste verkoop van Göteborg.
Berg werd in zijn debuutseizoen 2007/08 clubtopscorer van FC Groningen met vijftien doelpunten. In 2008/09 verbeterde hij zijn voorgaande prestatie met zeventien treffers in 34 eredivisie-wedstrijden, plus vijf in de play-offs.
Berg tekende in juli 2009 een vijfjarig contract bijHamburger SV, dat een niet bekendgemaakt bedrag voor hem betaalde aan FC Groningen.[1] Groningen meldde dat het om een clubrecord ging en dat het mee zou delen bij doorverkoop. Derde partijen gaan uit van omstreeks 10 miljoen euro.[2] Zijn debuut voor deze club maakte hij op 15 augustus tegenBorussia Dortmund. Hij mocht tijdens deze wedstrijd invallen en maakte ook meteen zijn eerste doelpunt.[3] Een paar dagen later scoorde hij ook tegenEn Avant Guingamp in deUEFA Europa League.[4]
In juli 2010 verhuurde Hamburger SV Berg voor één seizoen aanPSV. Daar kwam hij zijn landgenootOla Toivonen tegen, met wie hij ook samenspeelde in Jong Zweden op hetEK 2009 onder 21. In het verhuurcontract werd geen optie tot koop opgenomen.
Berg scoorde in de derde competitieronde van het seizoen 2010/11 tegenAZ (3–1 winst) zijn eerste (en tweede) doelpunt voor PSV. Zijn eerste Europese doelpunt voor PSV volgde vier dagen later in de laatste kwalificatieronde voor de Europa League tegenSibir Novosibirsk, waarin Berg 1–0 scoorde. De wedstrijden daarna start Berg echter steeds vaker vanaf de bank, hij moest plaats maken voor het 21-jarige talentJonathan Reis. Op 19 december 2010, vlak voor de winterstop, raakte Reis ernstig geblesseerd in de competitiewedstrijd tegenRoda JC, waarna Berg weer meer speeltijd kreeg. Nadat hij nauwelijks nog scoorde, ondanks enkele goede mogelijkheden, zwol de kritiek op Berg vanuit de media aan. Na een gemiste kans voor open goal, in het thuisduel tegenFC Utrecht op 20 maart 2011, haalde Fred Rutten hem uit de basis. Na ruim twee maanden zonder doelpunt maakte Berg op zondag 17 april uit tegenHeracles Almelo weer een doelpunt.
PSV besloot vervolgens om Berg terug naar HSV te laten gaan. Daar speelde hij nog twee seizoenen, waarna hij in de zomer 2013 een contract tekende bijPanathinaikos.[5] Na 4 jaar bij Panathinaikos vertrok Berg naar hetMidden-Oosten om voorAl Ain FC te gaan spelen. Hij bleef er 2 jaar om vervolgens naar hetRussischeKrasnodar te gaan.
Bij Krasnodar maakte Berg op 34-jarige leeftijd zijn debuut in deChampions League in een match tegenStade Rennais, het werd 1-1. Zijn eerste Champions League doelpunt maakte hij enkele wedstrijden later tegenSevilla FC door zijn ploeg in de 21ste minuut op een 0-2 voorsprong te brengen, Krasnodar verloor de wedstrijd echter met 3-2.
Berg maakte op 6 februari 2008 zijn debuut in hetZweeds voetbalelftal in een oefeninterland in en tegenTurkije (0–0), net alsSebastian Larsson (Birmingham City). Bij afwezigheid vanZlatan Ibrahimović begon hij op 19 november 2008 in de basis van het Zweedse nationale elftal in een oefeninterland tegenNederland. Eerder kwam hij twaalf keer uit voorde nationale ploeg onder 21. In deze twaalf wedstrijden scoorde hij eenmaal.
Na het reguliere seizoen 2008/09 kwam Berg met een Zweedse selectie uit op hetEK –21 van 2009. Hij scoorde in vier wedstrijden zeven keer en werd daarmee topscorer van het toernooi.[7] PSV'er en landgenootOla Toivonen en ItaliaanRobert Acquafresca volgden op de gedeelde tweede plaats, met ieder drie treffers. Op 11 mei 2016 werd Berg opgenomen in de Zweedse selectie voor hetEK 2016 in Frankrijk, zijn eerste grote eindtoernooi.[8] Zweden werd uitgeschakeld in de groepsfase na nederlagen tegenItalië (0–1) enBelgië (0–1) en een gelijkspel tegenIerland (1–1). Hij was twee jaar later basisspeler in de Zweedse ploeg die tot de kwartfinale kwam op hetWK 2018.