Use createFromFormat e getLastErrors para converter data dd/mm/aaaa no formato do MySQL sem gravar data inválida nem quebrar o INSERT.
Corrija o fuso horário no PHP 8.3 setando date.timezone no FPM e no CLI, e deixe o banco gravando em UTC com conversão só na exibição.
Escreva a data por extenso em pt-BR com IntlDateFormatter e pattern do ICU, sem array de meses, e evite o erro de fuso que tira um dia.
Entenda por que o DateTimeImmutable modify não altera o objeto, guarde o retorno certo e evite o bug de datas repetidas dentro de um laço em PHP.