My apologies if this is just noise, but I figured out the trigger and a workaround to my circumstances.
My descriptor sets the endpoint packet size to 64. I call Recv with a buffer and size that is 8*64. This works when sending more than 64 bytes or less than 64 bytes, but at exactly 64, I don't get the packet until something other than 64 bytes is sent.
By all appearances, the audio_speaker example does the same thing (calling RECV with a much larger buffer), but with an ISOCHRONOUS endpoint instead of a BULK endpoint, so perhaps it works under those circumstances.
Calling Class_Recv_Data with a size equal to the descriptor endpont maximum (64) appears to work with all three cases. On the send side, I'm still looking for calls to Send that end with a 64 byte packet and sending a zero byte packet after. Maybe if I'm felling brave later, I'll take it out and see if it breaks it.
Hope this helps someone else...
John