Sein erstes professionelles Engagement hatte er in Stranger at My Door (1991), obwohl er bereits seit seinem vierten Lebensjahr in Kinderstücken mitgespielt hatte. Der Film The Man Without a Face (1993) mit Mel Gibson in der Hauptrolle verhalf ihm im Alter von 13 Jahren zu einem Karrieresprung. Im folgenden Jahr hatte er eine Nebenrolle in dem Ensemblefilm Safe Passage. 1996 spielte er die Rolle des Puck in Benjamin Brittens Oper A Midsummer Night’s Dream an der Metropolitan Opera in New York. 1998 spielte er in The Thin Red Line einen zum Tode verurteilten jungen Soldaten im Pazifikkrieg des Zweiten Weltkriegs. Mit seiner Rolle in dem Film In the Bedroom (2001), in dem Sissy Spacek seine Mutter spielte, hatte er erneut Erfolg bei Kritikern und an den Kinokassen. Einen weiteren Kassenhit landete er in Terminator 3: Rise of the Machines (2003) als John Connor (als Ersatz für Edward Furlong in Terminator 2: Judgment Day), an der Seite von Arnold Schwarzenegger und Claire Danes. Im Jahr 2003 spielte er die Hauptrolle in der HBO-Serie Carnivàle, die ein treues Publikum und begeisterte Kritiken erhielt. Die Serie dauerte zwei Staffeln und endete 2006.
Stahl hat zwei Schurken gespielt, die gute Kritiken erhielten: Bobby Kent in dem Film Bully (2001) und Roark Jr./Yellow Bastard in Sin City (2005). Stahl hat seine Rolle als John Connor in Terminator Salvation nicht wieder aufgenommen, stattdessen hat Christian Bale sie übernommen. Zum Konzept des Films sagte Stahl: „Es ist ein Sprung in die Zukunft, also wird er ein bisschen älter sein“. Weitere Rollen waren How to Rob a Bank (2007), Sleepwalking (2008) und Quid Pro Quo (2008).
Im Jahr 2010 spielte Stahl die Rolle des Max Matheson in Mirrors 2, der Fortsetzung von Mirrors, unter der Regie von Victor Garcia und aus der Feder von Matt Venne. Zu seinen jüngeren Filmen gehören On the Inside (2010) und Afghan Luke (2011) sowie Away from Here (2014).
Im Jahr 2019 spielte Stahl den Serienmörder Glen Edward Rogers in The Murder of Nicole Brown Simpson. Die Dreharbeiten begannen im Sommer 2018 und der Film wurde am 9. Dezember 2019 in Großbritannien veröffentlicht. Der Film basierte auf Rogers‘ Behauptung, er selbst habe Nicole Brown Simpson getötet und nicht O. J. Simpson, Browns Ex-Ehemann und Hauptverdächtiger, der 1995 für den Mord angeklagt und freigesprochen worden war. Der Film wurde von den Kritikern weitgehend abgelehnt.
Im Jahr 2019 trat Stahl in dem Kurzfilm III von The Lumineers auf, der auf ihrem neuen Album basiert. Stahl spielte den Charakter Jimmy Sparks, der ein Vater und spielsüchtig ist.