Если в хотя бы из одном полей ФИО и ДР изменили более 2х символов, но при этом не изменили паспортные данные (блок identityDocument не передан), то считаем, что это корректировка данных существующего участника.

Если изменили менее 2х символов в полях ФИО и ДР, но при этом также изменили паспортные данные (блок identityDocument передан), то считаем, что это корректировка данных существующего участника.

Если для объекта owner/insurant в поле фамилии изменили более 2х символов, а в имени, отчестве и др 2 или менее символов и изменили паспортные данные (блок identityDocument передан), а также передан признак isGettingMarried = true, то считаем, что это корректировка данных существующего участника.

Если для объекта owner хотя бы в одном из полей ФИО и ДР изменили более 2х символов, и изменили паспортные данные (блок identityDocument передан) и признак isGettingMarried не передан, то считаем, что это изменение участника договора, т.е. изменение 43.

Если для объекта insurant хотя бы в одном из полей ФИО и ДР изменили более 2х символов, и изменили паспортные данные (блок identityDocument передан) и признак isGettingMarried не передан, то выводить error 510105 "Недопустимые изменения: не допускается изменение Страхователя на другое физическое лицо"        

private bool HasInsurantChangedCompletely(List<ObjectCompareResult> insurantChanges, bool? isInsurantGettingMarried)
        {
            var allowedInsurantChanges = insurantChanges
                .Where(dr => dr.ChangedFields.Any(f => _insurantFieldsAllowedForChanges.Contains(f)))
                .ToList();

            var fieldsValues = new Dictionary<string, Func<Insurant, string>>
            {
                [ChangesPaths.InsurantName] = i => i.Subject.IndividualEntity.Person.Name,
                [ChangesPaths.InsurantMiddleName] = i => i.Subject.IndividualEntity.Person.MiddleName,
                [ChangesPaths.InsurantLastName] = i => i.Subject.IndividualEntity.Person.LastName
            };

            var fullNameChanged = CheckLevenshteinDistanceFor(allowedInsurantChanges, fieldsValues);

            var lastNameChanged = CheckLevenshteinDistanceFor(
                allowedInsurantChanges,
                new Dictionary<string, Func<Insurant, string>>
                {
                    [ChangesPaths.InsurantLastName] = i => i.Subject.IndividualEntity.Person.LastName
                });

            var nameChanged = CheckLevenshteinDistanceFor(
                allowedInsurantChanges,
                new Dictionary<string, Func<Insurant, string>>
                {
                    [ChangesPaths.InsurantName] = i => i.Subject.IndividualEntity.Person.Name
                });

            var middleNameChanged = CheckLevenshteinDistanceFor(
                allowedInsurantChanges,
                new Dictionary<string, Func<Insurant, string>>
                {
                    [ChangesPaths.InsurantMiddleName] = i => i.Subject.IndividualEntity.Person.MiddleName
                });

            var identityDocumentChanged = insurantChanges.Any(change =>
                change.ChangedFields.Any(field =>
                    field == ChangesPaths.InsurantIdentityDocumentSeries ||
                    field == ChangesPaths.InsurantIdentityDocumentNumber));

            var dateOfBirthChanged = insurantChanges.Any(change =>
                change.ChangedFields.Any(field => field == ChangesPaths.InsurantDateOfBirth));

            if (!identityDocumentChanged)
            {
                return fullNameChanged || dateOfBirthChanged;
            }

            if (identityDocumentChanged)
            {
                if (isInsurantGettingMarried == true && lastNameChanged && !nameChanged && !middleNameChanged)
                {
                    return false;
                }

                if (isInsurantGettingMarried != true)
                {
                    return fullNameChanged || dateOfBirthChanged;
                }
            }

            return false;
        }

Кажется логика по определению смены страхователя работает не правильно, проверь пожалуйста