Timing/buffering issue with Digilent's EPP on Basys2?
Following this page https://embeddedmicro.com/tutorials/mojo/metastability-and-debouncing

I added buffering to the control signals sent by the host.  They weren't in my original question, since I was having strange results even with just usb_write.

always @(posedge clk) begin
    astb_buf &lt;= usb_astb;
    dstb_buf &lt;= usb_dstb;
end


Buffering just these two has fixed it the data problems.  The other signals are usb_write and usb_data[7:0], but these do not appear to need buffering at this point.

I have been able to send 100 and receive 100 bytes with no additions, losses or mutations, at which I'm relieved, as now I don't need to implement an error correcting protocol.