This happens because PayPal sends the data in reverse order and has a limit of 100 transactions returned per call.
So, if you specify a start date of 1 year ago and an end date of today you will get the 100 most recent transactions going backwards from today, not the 100 oldest transactions starting from your start date.
The only way to avoid this problem that I am aware of is to make sure you use small date ranges and make multiple API calls when you are downloading a large amount of data. Once you have your historical data built up you just need to make regular API calls before the number of undownloaded transactions exceeds 100.
Edit: It's also important to note that PayPal returns the actual transaction and their fee deduction for that transaction on two separate lines. Therefore although they say they return at most 100 transactions for one call it is really only 50 actual transactions plus 50 fee "transactions". If your requested download time frame has more than 50 actual transactions in it you will almost certainly end up missing transactions.