К сожалению, описанные вами поведения точно документированы как таковые в документах для XmlElementAttribute.IsNullable.
Я бы разделил его на две функции: первая с первым вызовом со своим собственным try / catch и собственным действием ошибки и возвращением данных запроса.
Затем я проверил бы эти данные и, когда они не были пустыми, снова вызвал второй запрос с собственной обработкой try / catch и error.