Thanks for the reply, Twigleg!
I am indeed setting on the polygon. I tried polygon.set('bones', bones_array), but the exact same result occurs. In GDScript it's likely that polygon.bones = is just a convenience syntax for set.
This is the result of printing polygon.bones after doing polygon.set('bones', bones_array):
[[Bone2D:479641], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
Any other suggestions? Much appreciated