I have never gotten Batch and Callouts to work in tests - see herehere for more detail
My approach these days is to put the all the code from the batch in a regular class that operates as the Batch Handling Class with its own Start, Execute and Finish. That way, I can call the code with callouts directly in my tests and it will work fine. The batch uses that class, but then I can use Test.IsRunningTest() to avoid calling those methods in the test context. Not perfect by any means, but it is the easiest way to get batches, callouts and tests to play nicely...