Cowan-Hall joined Premier League side Portsmouth from non-league outfit Rushden & Diamonds in 2007. Before he joined Pompey, he previously spent time on trial with Manchester United and Chelsea as a 16-year-old. He made his way into the Portsmouth reserve side where he made success and flew out with the Portsmouth first team to Portugal in their 2009 pre-season, where he made an appearance against Vitória de Guimarães. On 2 January 2010, Cowan-Hall joined Grimsby Town on loan, making his first appearance as a late substitute in injury time against Bury. The following week, Cowan-Hall missed the league clash with Cheltenham Town due to tonsillitis, and several days later he was forced to cut short his loan spell after contracting glandular fever. On 27 January 2010, Cowan-Hall re-signed for Grimsby for a second loan spell, this time until the end of the 2009–10 season. However, in March 2010 he returned to Portsmouth early with a hamstring injury after making only two substitute appearances in his second spell at Blundell Park. He was released by Portsmouth in July 2010 after the club's relegation from the Premier League.
Scunthorpe United
Following his release from Portsmouth, Cowan-Hall had trials at Burnley, Hull City, Brighton & Hove Albion, Derby County and Oldham Athletic. In October 2010, Cowan-Hall made an appearance for Scunthorpe United reserves on trial. After impressing he was invited back to their reserve match the next week. He scored the only goal of the game against Leeds United reserves at Elland Road. Following this performance, in October 2010, he was offered a place at Scunthorpe United on non-contract terms until the end of the 2010–11 season. In February 2011, Cowan-Hall returned to Rushden & Diamonds on loan. On his return to Irtlingborough, he scored on his debut against Eastbourne Borough. Cowan-Hall was released by the Iron in May 2011.
Woking
In July 2011, Cowan-Hall appeared for Gillingham on trial, scoring once against Erith & Belvedere. In August 2011, Cowan-Hall appeared for Newport County on trial, scoring once against Welsh Football League side Undy. Cowan-Hall signed for Woking on 12 August 2011. He made his debut with the club a day later, against Sutton United. He scored his first goal for Woking going on 3 September, against Welling United. Cowan-Hall went on to win both October and November player of the month for the club.
Cowan-Hall signed for Plymouth Argyle on 29 May 2012 after rejecting a new contract offer from Woking. He joined the club on 1 July for an undisclosed fee, with Plymouth paying Woking compensation due to his age. He scored on his competitive debut in a 3–0 Football League Cup win against Portsmouth on 14 August. Cowan-Hall scored his first goal in the Football League on 13 October in a 4–1 win at Barnet.
On 25 June 2013, Cowan-Hall signed for Wycombe Wanderers on a two-year contract. On 3 August 2013, Cowan-Hall made his debut appearance for Wycombe Wanderers in a league fixture against Morecambe, and scored a first half winner for the club, in a 1–0 victory. His final goal for the club came in the League Two home draw, against Luton Town. His final match for Wycombe came just two days later, in a goalless draw away at Shrewsbury Town.
Cowan-Hall returned on loan to Wycombe Wanderers on 23 January 2016 until the end of the season. On 29 June 2016 Cowan-Hall once again returned to Wycombe Wanderers on loan until 31 January 2017.
Wycombe Wanderers (second spell)
Cowan-Hall's contract with Millwall was terminated by mutual consent on 31 January 2017 and on 1 February 2017 he re-signed for Wycombe Wanderers until June 2019. He was released by Wycombe at the end of the 2018–19 season.