Sein internationales Debüt feierte Dahl Ende Januar 2001 bei der Junioren-Skiweltmeisterschaft im polnischen Karpacz-Szklarska. Im Sprint gewann er dort die Silbermedaille, mit der norwegischen 4-mal-10-Kilometer-Staffel wurde er Dritter und im Einzelrennen über zehn Kilometer im klassischen Stil Fünfter. Im 30-Kilometer-Freistilrennen erreichte er hingegen nur Platz 35. Vier Wochen später startete er in Oslo zu seinem ersten Rennen im Skilanglauf-Weltcup. Als 35. verpasste er die Punkteränge knapp.
Im Februar 2002 startete Dahl erstmals im Skilanglauf-Continental-Cup. Nach guten Leistungen dort und bei den folgenden FIS-Rennen in seiner Heimat Norwegen kam er im März zurück in den A-Kader und erreichte mit Rang neun im Sprint von Oslo seine ersten Weltcup-Punkte und auch seinen ersten Top-10-Rang. In die Saison 2002/03 startete Dahl mit zwei Top-10-Platzierung im Continentalcup in Gåsbu. Zurück im Weltcup feierte er auch in Cogne einen Platz unter den besten zehn. Trotz dieses Erfolges konnte er sich auch weiter nicht im A-Kader festsetzen und wechselte regelmäßig zwischen A- und B-Kader.
Erst im März 2003 verließ Dahl den B-Kader und startete fortan neben den lokalen FIS-Rennen international nur im Weltcup. Im Dezember 2003 feierte Dahl in Toblach und im Val di Fiemme zwei Podestränge, darunter ein dritter Platz im Teamsprint mit Håvard Solbakken und ein zweiter Platz im Sprint, bei dem er sich nur Jens Arne Svartedal geschlagen geben musste. Auch im Sprint von Stockholm stand er im Februar erneut auf dem Podest. Wenig später beendete er die Saison auf Rang sechs der Sprintweltcup-Wertung. In der Gesamtweltcup-Wertung belegte Dahl Rang 26.
In die Saison 2004/05 startete Dahl mit einem guten sechsten Rang im Sprint von Bern. Ab Januar 2005 startete der Norweger neben seinen Einsätzen im Weltcup auch im Alpencup sowie Scandinavian Cup. Im Weltcup konnte er in der Saison zwar oft punkten, verpasste aber sein Ergebnis aus der letzten Saison und landete in der Gesamtwertung nur abgeschlagen im Mittelfeld. Auch zu Beginn der folgenden Saison verpasste Dahl weiter Top-Plätze. Erst im Februar 2006 gelang ihm in Davos mit dem dritten Platz im Sprintweltcup wieder der Lauf auf einen Podestplatz. Es blieb jedoch bis auf weiteres der letzte Top-Platz. Bis Ende 2006 konnte er nur in den unteren Wettbewerbsklassen Siege und Podestränge feiern.
Zur Tour de Ski 2006/07 startete er erfolgreich und beendete diese auf einem guten 31. Platz. Beim folgenden Sprint in Rybinsk belegte Dahl im Ziel Rang sechs. Zur Saison 2007/08 gelang ihm schließlich der Sprung in die Weltspitze. Nach Platz drei beim Saisonauftakt in Düsseldorf im Sprintweltcup lief er mit der Staffel auf den sechsten Platz. Nach einer schwachen Tour de Ski 2007/08 und Norwegischen Meisterschaften 2008 ohne Medaille überraschte Dahl schließlich beim Sprint in Otepää mit einem zweiten Rang. Auch beim Teamsprint in Liberec belegte er am Ende als Dritter einen Podestrang. Im März beendete er die Saison auf Rang drei der Sprintweltcup-Wertung. In der Weltcup-Gesamtwertung erreichte er aufgrund schwacher Ergebnisse in den Distanzrennen nur Rang 19.
Einen noch besseres Ergebnis in der Gesamtwertung sicherte sich Dahl in der folgenden Saison 2008/09. Bereits beim Auftaktweltcup in Kuusamo stand er als Dritter des Sprints erneut auf dem Podium. Die Tour de Ski 2008/09 beendete Dahl wenige Wochen später auf Rang 21. Bei den Nordischen Skiweltmeisterschaften 2009 in Liberec erreichte er Rang 15 im Sprintrennen.[1] In den weiteren Wettbewerben startete er nicht. Im März 2009 lief Dahl in Trondheim noch einmal aufs Podest und beendete die Saison auf Rang 16 der Gesamtweltcup-Wertung.
Am 13. Dezember 2009 feierte Dahl beim Sprint in Davos seinen ersten Weltcup-Sieg. Auch in Canmore bewies er seine guten Leistungen und lief als Zweiter ins Ziel. Zuvor hatte er für die Olympischen Winterspiele 2010 in Vancouver wie bereits 2006 in Turin aufgrund der starken Konkurrenz unter den Norwegern keine Berücksichtigung für den Kader gefunden.
Zu Beginn der Saison 2010/11 gewann er die Sprintetappe beim Saisonauftakt in Kuusamo. Im Januar 2011 lief er beim Teamsprint in Liberec als Dritter erneut aufs Podium. Einen weiteren Einzelpodestplatz verpasste er zum Saisonende in Lahti als Vierter des Sprints nur knapp. In den folgenden Jahren lief er bei Einzelweltcups vermehrt der Konkurrenz hinterher. Nur bei Teamsprints und Staffelrennen erreichte er noch Top-Platzierungen.
Im Dezember 2013 startete der zwischenzeitlich 32-Jährige erstmals bei Langstreckenrennen im Skilanglauf-Marathon-Cup. Dabei lief Dahl in Livigno auf Rang 35. Wenige Tage später bestritt er sein bislang letztes Weltcup-Rennen. Beim Skilanglauf-Marathon-Cup im Val di Fiemme belegte er im Januar 2014 Rang zwei. Im August 2014 startete er wie auch in den Jahren zuvor bei Rollski-Wettbewerben. 2013[2] und 2015[3] gewann er das Flyktningerennet über 44 km klassisch. Zu Beginn der Saison 2015/16 siegte er beim La Sgambeda. Im weiteren Saisonverlauf gewann er den Wasalauf und beim Birkebeinerrennet. Zudem wurde er Zweiter beim Årefjällsloppet sowie Dritter bei Toblach–Cortina und erreichte zum Saisonende den dritten Platz in der Gesamtwertung der Ski Classics. Im April 2016 siegte er beim Nordenskiöldsloppet, dem längsten Skilanglaufrennen der Welt über 200 km.[4] Im folgenden Jahr gewann er den Wasalauf.