Never mind, just solved my own problem
after troubleshooting a little more I figured out that I was registering the custom post type using a plugin boilerplate that, in order to reduce its footprint in the admin panel, only calls these plugin functions with no AJAX, which is something that the custom fields use when a user chooses the field type and loads the options via ajax.
Such a pain but I’m glad I solved this.
I changed:
if( is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX )
to
if ( is_admin() )