Сам по себе DTO — штука неоднозначная, но здесь не об этом.
Если данные, пришедшие от другого компьютера, представлены изменяемым объектом, изменение этого объекта должно приводить к изменению данных на исходном компьютере.
Если изменяемый объект хранит данные из файла, изменение этого объекта должно приводить к перезаписи файла.
Если информация из базы данных представлена изменяемым объектом, изменение этого объекта должно приводить к выполнению UPDATE в базе данных.
Если какой-то компонент описывает своё состояние изменяемым объектом, изменение этого объекта должно приводить к изменению состояния компонента.
Если изменяемый объект служит для описания данных (JSON, Protobuf, Externalizable или просто Builder), данные уже сформированы (метод вроде toJson, toByteArray, writeToStream, writeExternal, build вызван) и происходит изменение объекта, нужно вернуться назад во времени и применить изменения к созданным ранее объектам.
Во всех остальных 100% случаев DTO должны быть неизменяемыми.