O seu primeiro casting profissional foi em Stranger at My Door (1991), embora ele tenha actuado em peças infantis desde os quatro anos de idade. O filme The Man Without a Face de 1993, co-estrelando Mel Gibson, ajudou a impulsionar sua carreira aos 13 anos de idade. No ano seguinte, ele teve um papel coadjuvante no filme Safe Passage. Em 1996, interpretou o papel de Puck na ópera A Midsummer Night’s Dream, de Benjamin Britten, na Metropolitan Opera, em Nova York. Em 1998, interpretou um jovem soldado condenado durante a Segunda Guerra Mundial do Pacífico, em A Linha Vermelha Fina. Ele fez sucesso de crítica e bilheteria novamente com seu papel no filme In the Bedroom 2001, que estrelou Sissy Spacek como sua mãe. Ele marcou outro sucesso de bilheteria em Terminator 3: Rise of the Machines (2003) como John Connor (substituindo Edward Furlong em Terminator 2: Judgment Day), co-estrelando com Arnold Schwarzenegger e Claire Danes. Em 2003, ele estrelou a série Carnivàle da HBO, que atraiu um público fiel, bem como críticas de rave. O espetáculo durou duas temporadas, terminando em 2006.
Stahl interpretou dois vilões a boas críticas: Bobby Kent no filme Bully (2001) e Roark Jr./Yellow Bastard in Sin City (2005). Stahl não retomou seu papel de John Connor em Terminator Salvation, com Christian Bale assumindo o lugar. Stahl observou o conceito do filme como “um salto para o futuro, por isso será um pouco mais velho”. Outros papéis incluíram How to Rob a Bank (2007), Sleepwalking (2008) e Quid Pro Quo (2008).
Em 2010, Stahl estrelou como Max Matheson em Mirrors 2, a continuação de Mirrors, dirigido por Victor Garcia e escrito por Matt Venne. Entre seus filmes mais recentes estão On the Inside (2010) e Afghan Luke (2011), e Away from Here (2014).
Em 2019, Stahl retratou o serial killer Glen Edward Rogers em The Murder of Nicole Brown Simpson. As filmagens começaram durante o verão de 2018 e o filme foi lançado no Reino Unido em 9 de dezembro de 2019. O filme foi baseado na afirmação de Rogers de que ele mesmo matou Nicole Brown Simpson em vez de O. J. Simpson, ex-marido de Brown e o principal suspeito que já havia sido julgado e absolvido pelo assassinato em 1995. O filme foi muito bem planejado pelos críticos.
Em 2019, Stahl apareceu no curta The Lumineers, III, que é baseado no novo álbum deles. Stahl interpretou o personagem Jimmy Sparks, que é pai e viciado em jogo.