Dahl attended Oak Mountain High School in Birmingham, Alabama. As a freshman, he made the school's varsity baseball team as a shortstop. In 2011, Dahl was selected to play for the United States 18-and-under national baseball team, and appeared in the 2011 Pan American Games. Dahl recorded 11 runs batted in (RBIs) during the 15 games of the tournament, in which the United States won the gold medal.
In 2012, his senior at Oak Mountain, Dahl had a .412 batting average, 34 RBIs, and 18 stolen bases as an outfielder. He committed to attend Auburn University on a scholarship to play college baseball for the Auburn Tigers.
The Colorado Rockies selected Dahl in the first round, with the tenth overall selection, of the 2012 Major League Baseball draft. Dahl signed with the Rockies, receiving a $2.6 million signing bonus, rather than follow through on his commitment to attend Auburn University. He made his professional debut for the Grand Junction Rockies of the Rookie-level Pioneer League, hitting .379/.423/.625 with nine home runs and 57 RBIs. He was named the Pioneer League's most valuable player.
Prior to the 2013 season, Dahl was ranked as the Rockies second best prospect by Baseball America. He was also ranked as the 58th best prospect in baseball by MLB.com. The Rockies suspended Dahl at the beginning of the season, reportedly because he missed a team flight, and played in ten games for the Asheville Tourists of the Class A South Atlantic League, missing the remainder of the season due to a torn hamstring. Dahl began the 2014 season with Asheville, and was promoted to the Modesto Nuts of the Class A-Advanced California League in July. Between Asheville and Modesto, Dahl batted .299, hit 14 home runs, and stole 21 bases for the season.
On May 28, 2015, while playing for the New Britain Rock Cats of the Class AA Eastern League, Dahl collided with a teammate during a game while chasing a fly ball, and suffered a spleen laceration. After surgery to repair the damage, Dahl opted to have his spleen removed, rather than waiting for it to heal, in order to return to baseball with less recovery time. Allowing it to heal would have cost Dahl the remainder of the season, while removing it left him with a recovery time of four to six weeks. He resumed playing baseball in July, with a six-game rehabilitation stint with the Boise Hawks of the Class A-Short Season Northwest League, before returning to New Britain. Dahl finished the season with a .278 batting average, six home runs, and 22 stolen bases.
The Rockies invited Dahl to spring training as a non-roster player in 2016. Dahl began the 2016 season with the Hartford Yard Goats of the Eastern League. After he batted .278 with 13 home runs, 45 RBIs, and 16 stolen bases for Hartford, the Rockies promoted Dahl to the Albuquerque Isotopes of the Class AAA Pacific Coast League. Dahl appeared in the All-Star Futures Game as an injury replacement for Austin Meadows. After batting .484 in 16 games for Albuquerque, the Rockies promoted Dahl to the major leagues on July 25, 2016, and he made his major league debut that night as the Rockies' starting left fielder. Dahl recorded his first major league hit off of the Baltimore Orioles' Yovani Gallardo during his debut. On August 11, 2016, Dahl pushed a career-opening hitting streak to 17 games, tying the MLB record set by Chuck Aleno in 1941. The hitting streak ended at 17 games.