The minnow looked set for an expected defeat when it fell 2-0 behind inside 30 minutes at NRG Stadium.
Jonathan David's powerful finish and Lucas Cavallini's goal had Canada, which finished second to Mexico in Group A, on track.
But Haiti remarkably turned the game around in the second half to reach its first CONCACAF Gold Cup semi-final.
Duckens Nazon dispossessed Canada goalkeeper Milan Borjan to pull a goal back before Herve Bazile converted a 70th-minute penalty.
The turnaround was complete when Wilde-Donald Guerrier got on the end of a beautiful Nazon pass to put Haiti ahead six minutes later, sealing an incredible win.
Haiti will face either Mexico or Costa Rica in the semi-finals on Wednesday (AEST).