To a large extent I agree these two appear very similar. But must say these two different in some aspects lets take a look at those:
Firstly if your concern is bulk dumping then use BatchGetItem if it is sorted retrieval or in better words narrowed down retrieval stick to Query.
Let’s talk of size of retrieval which you mentioned in the question. BatchGetitem retrieves 16mb or 100 items. Whereas Query will give 1mb of data in response.
Next how do these two queries retrieve data? Well, BatchQueryItem uses hashkey for identification of items whereas Query uses secondary or global indexes.
One important difference between the two is Query supports filter expressions.
I hope this helps.