It's hard to debug without seeing the code, but...

> created time stamp greater than or equal to the last successful
> application completion datetime

This is incorrect, you need to keep track of the max Created/Updated date that you have pulled, rather than when the app ran.

> Get the remaining batches using the exact same filter but with a
> "skip" clause to separate them.

This assumes the order won't change, and the set stays the same. Say for example there are 10 records but five have the exact same date, if you pull 10 take 5 and then 10 skip 5 take 5 you might get duplicates and skip some rows if the order is different on the second pull. Follow @J_H's advice and get record with a date between two dates instead