Copeland attended White Oak High School in White Oak, Texas. He then attended the University of Southern Mississippi, and was drafted by the Baltimore Orioles in the 21st round of the 2010 Major League Baseball Draft. Copeland played the 2010 season with the Aberdeen IronBirds and Delmarva Shorebirds, and totalled a 3–5 win–loss record, 2.66 earned run average (ERA), and 53 strikeouts in 71 innings pitched. Copeland began the 2011 season in Delmarva, and later earned a promotion to the Advanced-A Frederick Keys. In 141 2⁄3 innings pitched, he posted an 8–11 record, 5.53 ERA, and 77 strikeouts. Copeland made 18 starts with the Keys in 2012, posting a 3–8 record with a 6.88 ERA before being released by Baltimore. He would be signed by the Blue Jays organization shortly afterward, and pitched with the Dunedin Blue Jays for the rest of the season. In 36 2⁄3 innings with Dunedin, Copeland posted a 4–1 record and a 2.70 ERA.
Copeland opened the 2014 season with the Double-A New Hampshire Fisher Cats, and earned a late promotion to the Triple-A Buffalo Bisons. In total, he pitched to an 11–9 record, 3.45 ERA, and 105 strikeouts in 164 1⁄3 innings. In the offseason he played for the Estrellas de Oriente of the Dominican Winter League, posting a 2–0 record and a 1.23 ERA in 29 1⁄3 innings. Copeland opened the 2015 season in Triple-A, and earned a 2–1 record with a 1.44 ERA through his first 4 starts.
Following a Blue Jays loss on May 1, 2015, Copeland was called up for the first time, replacing Andrew Albers on the roster. He made his debut on May 2, pitching 1 scoreless inning in an 11–4 win against the Cleveland Indians. Copeland was optioned back to Triple-A Buffalo the following day, recalled on May 18, and returned to Buffalo on May 29. He was recalled by Toronto again on June 2 to be the 26th man for the second game of a doubleheader against the Washington Nationals, and was returned to Buffalo the next day. Copeland was recalled once again on June 10, to make his first major league start in place of Aaron Sanchez. He earned his first win as the Blue Jays beat the Miami Marlins 7–2. Copeland pitched 7 innings and yielded 7 hits and 1 earned run, while striking out 4. He was optioned back to Buffalo after the game. He was recalled on June 16, after Sanchez was placed on the disabled list, and made 2 additional starts for the Blue Jays before returning to Buffalo. He was designated for assignment on September 13, and outrighted to Buffalo on September 16. Copeland finished his first Major League season with a 1–1 record, 6.46 ERA, and 6 strikeouts in 15 1⁄3 innings pitched.
Copeland elected free agency on November 6, 2015, but was re-signed to a minor league contract by the Blue Jays on December 18, that included an invitation to spring training. Copeland was reassigned to minor league camp on March 12.
On April 9, 2016, Copeland's contract was sold to the LG Twins of the KBO League for an undisclosed transfer fee. The Twins then signed him to a one-year, $750,000 contract. After 13 starts, he was waived and released on July 8, 2016, and replaced on the Twins' roster by another former major league pitcher, David Huff.
On July 24, Copeland signed a minor league contract with the Toronto Blue Jays, and was assigned to the Triple-A Buffalo Bisons. He made nine starts for the Bisons, going 3–4 with a 3.04 ERA and 33 strikeouts in 50 1⁄3 innings.
During the 2016 offseason, Copeland signed a minor league contract with the Miami Marlins.