It turns out I was missing the publish_video permission in my access token.
publish_video
Once I included that permission, the video publishing process worked as expected.