I am seeing a very similar issue to the one discussed in this question, which was due to a bug in Spring '17.
The Querylocator returned by the Start method returns 9,989 records, which I can verify in the debug log.
But, then the Execute method runs 9 times, on the default batch size of 200 records, which I can also verify in the debug log. After running 9 times, on 1,800 records total, the Finish method is called and the job ends. The Apex Jobs page shows 9 out of 9 jobs completed with no failures.
I am in an Enterprise Edition, Partial Sandbox, on the Winter '18 release.
Does anyone have any ideas on what might be causing the Execute method not to process all of the records returned by the Start method?