Problems reading large packets with USBHost::inTransfer

The code is a version of the Arduino camera control library modified to work with usbhost Pulling out the relevant bits, it looks like this:

#define PTP_MAX_RX_BUFFER_LEN   512
#define PTP_MAX_RX_DATA_LEN (PTP_MAX_RX_BUFFER_LEN - PTP_USB_BULK_HDR_LEN)
typedef struct
{
  uint32_t len;
  uint16_t con_type;
  uint16_t opcode;
  uint32_t transaction_id;
  uint8_t data[PTP_MAX_RX_DATA_LEN];
} PTP_DATA_CONTAINER;

  PTP_DATA_CONTAINER data;
  ZeroMemory(sizeof(data), &data);
  uint32_t nbytes = sizeof(data);

  // nbytes is 512, and data is all zeros

  uint32_t rcode = usb->inTransfer(devAddress, epDataIn, &nbytes, (uint8_t*)&data);

  // rcode is zero
  // nbytes is 512, and data is all zeros