Resolvido!
Na referência do tipo Puppet , um atributo do recurso file chamado replace foi exibido para ser apenas o que eu precisava. Cito o link acima:
replace
Whether to replace a file or symlink that already exists on the local system but whose content doesn’t match what the
sourceorcontentattribute specifies. Setting this tofalseallows file resources to initialize files without overwriting future changes. Note that this only affects content; Puppet will still manage ownership and permissions. Defaults totrue. Valid values aretrue(also calledyes),false(also calledno).
Eu simplesmente adicionei
replace => false
para os recursos do meu arquivo de zona e isso funcionou.
Editar
Na verdade, usei false em vez de no , pois não tenho certeza se o último é suportado (mesmo que o documento diga que é); outro sinalizador booleano similar me deu um erro de sintaxe quando tentei atribuí-lo yes . Portanto, use false para ser seguro.