Bind and apply SURFACE_DEFORM modifier without bpy.ops?
It turned out I had to do a scene.update() before applying the modifier, as the surface deform modifier was added by code via modifiers.new().

I'm still looking for a way to do the bind without the bpy.ops* however.