Mills was originally selected by the Toronto Blue Jays in the 22nd round in the 2006 amateur draft. Mills, however, chose not to sign with the Jays and instead returned to school for his senior year to complete his degree in civil engineering. After completing his senior season at Arizona, Mills would once again be selected by the Blue Jays, this time in the fourth round of the 2007 amateur entry draft. He began his professional career later in 2007 with short-season Class A Auburn, posting a 2–0 won-lost record in 18 innings, striking out 21 with an ERA of 2.00. In 2008, Mills achieved the best record by a pitcher in the entire Blue Jays' minor league organization. Splitting his season with three teams, Mills was 13–5 in 27 games, with 159 strikeouts over 147.1 innings pitched, with an ERA of 1.95. He was chosen a Midwest League Mid-Season All-Star at Lansing. Advancing to AAALas Vegas 51s for 2009, Mills at the time of his promotion was leading the team in innings pitched with 76.1, and had a 1–8 record, a 4.48 ERA, and 65 strikeouts. The Toronto Blue Jays had suffered a string of injuries to many of their pitchers from early 2009 onwards, leading to several promotions from within their minor-league system. On June 17, Mills' contract was purchased by the Blue Jays. On June 18, 2009, he made his major league debut by taking over Casey Janssen's scheduled start on the road against the 2008 World Series champion Philadelphia Phillies, giving up four earned runs in innings.
On December 3, 2011, he was traded to the Los Angeles Angels of Anaheim for catcher Jeff Mathis. He made his only appearance for the Angels on July 8 and earned his 3rd career win, pitching five scoreless innings, with no walks and six strikeouts, and three hits allowed.
On January 9, 2014, Mills signed a minor-league contract with the Milwaukee Brewers. Mills was assigned to the Nashville Sounds of the PCL, where in 12 starts, he was 4-2 with a 1.56 ERA.
Oakland Athletics
On June 17, 2014, Mills was traded to the Oakland Athletics for cash considerations, which was later revealed to be $1. He had an opt-out clause in his contract with the Brewers that allowed Mills to leave the organization for zero compensation if another team put him on their active roster. Mills joined the Athletics starting rotation immediately and made his first start for the A's on June 20 against the Boston Red Sox. On June 25 against the New York Mets, Mills picked up his first win as an Oakland Athletic. He was designated for assignment on July 7, after making 3 starts for Oakland and posting a 1–1 record with a 4.41 earned run average.
Second stint with Toronto Blue Jays
On July 17, 2014, Mills was claimed off waivers by the Toronto Blue Jays. After allowing 8 runs in 2 innings pitched during a 14–1 loss to the Boston Red Sox, Mills was designated for assignment on July 22. He cleared waivers on July 25, and was assigned to the Triple-A Buffalo Bisons. On August 10, Mills was recalled from Triple-A. After pitching in relief in Seattle on August 11, he was designated for assignment on August 12, and assigned outright to Buffalo on August 14. Altogether, Mills recorded a 27.00 ERA with 5 strikeouts in 4 innings for the Blue Jays in 2014. He elected free agency after the season ended.
Second stint with Oakland Athletics
On October 27, 2014, Mills signed a minor league contract with the Oakland Athletics. He was called up from the Triple-A Nashville Sounds on August 14, 2015 to start against the Baltimore Orioles. Mills was designated for assignment on August 15, and assigned outright to Nashville on August 17. He elected to become a free agent following the season.