Canada controlled possession in Glendale, Arizona but 2015 runner-up Jamaica made it count on the scoreboard on Friday.
Threatening on the break, Shaun Francis gave the Jamaicans a sixth-minute lead at the University of Phoenix Stadium after finishing powerfully from a Darren Mattocks cut-back.
Jamaica made it 2-0 early in the second half as Romario Williams curled a shot beyond Canada goalkeeper Milan Borjan.
A long-range stunner from Junior Hoilett just past the hour-mark gave Canada some hope but Jamaica held on to reach the final four for only the fourth time.
Jamaica made two changes to the team that concluded the group stage with a 1-1 draw against El Salvador. Francis and Omar Gordon were called into the starting XI by Theodore Whitmore as Oniel Fisher and Cory Burke dropped to the bench.
Boosted by the inclusion of Orlando City's Cyle Larin, the returning Canada star replaced Lucas Cavallini up front. Russell Teibert and teenage sensation Alphonso Davies returned to the line-up at the expense of Sam Adekugbe and Manjrekar James after qualifying for the quarter-finals for the first time since 2009.