On August 14, 2008, Castillo was sent to the Cincinnati Reds as a part of the Adam Dunn trade, which took place August 11. On September 1, he was called up and made his MLB debut the following day against the Pittsburgh Pirates, flying out to left in his one at-bat as a pinch hitter. His first hit was on September 3, a single to right field off T. J. Beam of the Pirates, also as a pinch hitter. Castillo played in 18 MLB games in 2008, with 9 hits in 32 at-bats for a.281 average. He began the 2009 season with the Triple-A Louisville Bats after failing to earn a spot on the Reds' roster. On June 20, he was called up to the Reds and appeared in four games with two hits in three at-bats. He played in a total of 22 games with the Reds over the two seasons, with 11 hits in 35 at-bats for a.314 average.
;Atlanta Braves Following the 2010 season, Castillo became a minor league free agent. He signed a minor league contract, with an invitation to spring training, with the Atlanta Braves. He spent the 2011 season with the Triple-A Gwinnett Braves, recording a slash line of.262/.285/.366 with 5 HR and 37 RBI in 80 games. ;Colorado Rockies On December 16, 2011, Castillo signed a minor league contract with the Colorado Rockies and played in Triple-A for the Colorado Springs Sky Sox, slashing.253/.273/.365 with 4 HR and 34 RBI in 74 games. ;Los Angeles Dodgers On November 21, 2012, Castillo signed a minor league deal with the Los Angeles Dodgers. The Dodgers released him at the end of spring training. ;Vaqueros Laguna On May 24, 2013, Castillo was signed to the Mexican League Triple-A Vaqueros Laguna team. ;Toros de Tijuana On April 1, 2014, Castillo was traded to the Toros de Tijuana. He was released on April 12, 2014. ;Broncos de Reynosa On May 28, 2014, Castillo signed with the Broncos de Reynosa of the Mexican Baseball League. He was released on July 1, 2014. ;Pittsburgh Pirates On January 30, 2015, Castillo signed a minor league contract with the Pittsburgh Pirates. He elected free agency on November 6. ;Toronto Blue Jays On February 26, 2016, Castillo signed a minor league contract with the Toronto Blue Jays, and was assigned to the Triple-A Buffalo Bisons. ;New York Yankees On January 7, 2017, Castillo signed a minor league contract with the New York Yankees. He elected free agency on November 6, 2017. ;Long Island Ducks On March 27, 2018, Castillo signed with the Long Island Ducks of the independent Atlantic League of Professional Baseball. ;Second stint with Yankees On May 24, 2018, Castillo's contract was purchased by the New York Yankees. He elected free agency on November 2, 2018.
Miami Marlins
On February 28, 2019, Castillo signed a minor league contract with the Miami Marlins. He opened the 2019 season with the New Orleans Baby Cakes. His contract was selected by the Marlins on June 21. The next day, in his first MLB game in 10 years and two days, Castillo hit a go-ahead two-run double in a Marlins 5–3 win over the Philadelphia Phillies. On September 3, Castillo was designated for assignment. He elected free agency on October 14, 2019. He re-signed with the Marlins organization on July 31, 2020.