Haley – ein sogenannter Enforcer oder Grinder – spielte während seiner Juniorenzeit zwischen 2002 und 2007 für die Sarnia Sting und Toronto St. Michael’s Majors, zu denen er im Dezember 2005 transferiert worden war, in der Ontario Hockey League (OHL). In diesem Zeitraum absolvierte der Stürmer insgesamt 286 Partien in der kanadischen Juniorenliga und sammelte dabei 127 Scorerpunkte, darunter 69 Tore.
Zur Saison 2014/15 schloss sich Haley als Free Agent den San Jose Sharks an. Auch dort spielte er in den folgenden zwei Jahren in der NHL und für die Farmteams Worcester Sharks und San Jose Barracuda in der AHL, ehe er in der Spielzeit 2016/17 den festen Sprung in den NHL-Kader schaffte. Als sein Vertrag im Sommer 2017 auslief, wechselte er im Juli 2017 abermals als Free Agent zu den Florida Panthers und unterschrieb bei den Panthers einen Zweijahresvertrag. Dort war mit Bob Boughner der einstige Assistenztrainer der Sharks wenige Wochen zuvor als Cheftrainer angestellt worden. In der folgenden Spielzeit 2017/18 führte Haley die gesamte NHL in Strafminuten (212) an, von denen ein Großteil aus Faustkämpfen resultierte. Im folgenden Spieljahr wurde der Angreifer nur noch sporadisch eingesetzt und absolvierte bis Februar 2019 lediglich 24 Spiele für Florida. Bei dem Versuch ihn über den Waiver in die AHL zu schicken, wurde er von seinem Ex-Team aus San Jose ausgewählt, dass damit seinen bis zum Saisonende laufenden Vertrag übernahm. Dieser wurde im folgenden Sommer nicht verlängert, sodass er sich im Oktober 2019 als Free Agent abermals den New York Rangers anschloss. Für diese bestritt er 22 Partien, ehe er aufgrund einer Muskelverletzung bis zum Saisonende ausfiel. Im November 2020 wechselte er, ebenfalls als Free Agent, im Rahmen eines Einjahresvertrags zu den Ottawa Senators und beendete nach vier Einsätzen im Frühjahr 2021 im Alter von 35 Jahren seine aktive Karriere.
Zur Saison 2021/22 kehrte Haley als Assistenztrainer zu seinem Juniorenklub Sarnia Sting in die OHL zurück.
(Legende zur Spielerstatistik: Sp oder GP = absolvierte Spiele; T oder G = erzielte Tore; V oder A = erzielte Assists; Pkt oder Pts = erzielte Scorerpunkte; SM oder PIM = erhaltene Strafminuten; +/− = Plus/Minus-Bilanz; PP = erzielte Überzahltore; SH = erzielte Unterzahltore; GW = erzielte Siegtore; 1Play-downs/Relegation; Kursiv: Statistik nicht vollständig)