My bad. Looks like there was a classpath issue. Once I had the .classpath file setup correctly, sync-on-demand started working fine.
Strange that Ant built it fine, must have been something in the buildfile.
Thanks for all your help!
Hopefully this conversation can act as a guide for others