Makes perfect sense to me, depending on the maxpacket size.
In general if you ask for a certain number of bytes, and the device sends less, and not a full packet, the read will end and the buffer will be partly filled. Just as you describe.
I don't know the specifics of HidD_GetInputReport, but if its supposed to behave as you suggest, that looks like a bug. But a bug which is quite understandable, and is due to not coping with a misbehaving device properly.