OK, a little more information.
I’ve now found the :validate => false parameter to Post.save.
As expected, it bypasses the validation and saves the post, but in doing so it seems to stop the poll plugin from creating the [poll] structure in the PostCustomField row.
Any other ideas?
I’m thinking that I could change the post ownership to a level 4 or system user, carry out my poll actions, and then change the ownership back with validation turned off, but this is already feeling a bit hacky.