Actualización: El transitorio simplemente no se guarda. Se guarda cuando lo json_encode().
Además, no puedo reproducir esto en otra instancia de Wordpress, así que lo estoy trasladando a soporte porque creo que es un problema de Wordpress. Sospecho que podría haber algún tipo de plugin de seguridad interfiriendo.