fnusb_control (https://github.com/OpenKinect/libfreenect/blob/master/src/usb_libusb10.c#L571) is typically always called with wLength set to 512 during initialization.
This works fine on USB 2.0, and the returned packet has the correct length. Over USB 3.0 the length is arbitrary and sometimes equal to the max (512). Subsequent packets get corrupted and the device can never be initialized.
Tested on Ubuntu 12.04 with Kernel 3.5.3
This is a problem moving forwards as some laptops now only have USB 3.0 support.