One of the bugs was a floating point overflow in the latest version of SQlite. I reverted to an earlier version and now it works.
TDbf.CopyFrom does work, as long as I have enough RAM and it's as slow as importing with DataSets, so I'll have to use a query there as well.
Edit: it doesn't.