The above is pretty much how I ended up doing the updates.
Main issue was order of getting/putting data so that nested objects worked correctly.
Eg need to do brands and categories updates before you can add products using them. Products need to be added before you can do images or Options/Option Sets
My first version I've stuck with HTTParty, but the next refactor will use Typhoeus to get through the data quicker; but need to be mindful of BC's API limits which for this sort of process you'll run into pretty quick (eg 4k product updates).