This is because knife project only uses wire or boundary edges:
Knife projection is a non-interactive tool where you can use objects
to cookie-cut into the mesh rather than hand drawing the line.
This works by using the outlines of other selected objects in
edit-mode to cut into the mesh, resulting geometry inside the cutters
outline will be selected.
Outlines can be wire or boundary edges.
To use Knife Project, in 'object' mode select the "cutting object"
first then shift select the "object to be cut". Now tab into edit mode
and press "knife project".
emphasis mine
A boundary edge is an edge with nothing connected on one side, e.g.:
The primitives, being manifold objects, do not have wire or boundary edges.
Suzanne partially works because it is non-manifold (the eyes are disconnected). The two circles that you get by projecting Suzanne are the boundary edges around the eyes.
The error message is a little bit strange though.