Happily, I found a solution that circumvents patch() altogether and pretty much makes direct use of polyshape, as I was hoping for. It seems that any 2D plotting command can also be used to plot into an existing 3D axis. So, I can just use plot.polyshape() to add the annulus to a 3D plot directly. One can also apparently use hgtransforms to re-orient polyshapes in 3D space arbitrarily, as in the example below. This is great - it basically means that the full power of polyshape is directly available in 3D as well as 2D.
load('example.mat')
t = 0:pi/10:2*pi;
figure
[X,Y,Z] = cylinder((2+cos(t))*10);
surf(X,Y,Z-.5)
M=[ 1.0000 0 -0.0035 0
0 1.0000 0 0
0.0035 0 1.0000 0
0 0 0 1.0000];
t=hgtransform('Matrix',M);
Hpgon=plot(pgon,'Parent',t,'FaceColor','r');
axis vis3d






