Projecting a cylinder's wall or the face of a round along a circular edge failed with "face projection has an open or invalid boundary": these surfaces are stored in halves joined by hidden seams, and the projection dropped the seams but kept only the picked half. It now projects the whole patch, the face as drawn, through the same surface_patch the viewport uses to highlight it.