В целом, я думаю, вам бы помогло, разбив некоторые вещи на несколько вспомогательных методов. Например, вы можете извлечь ваши чеки, которые выглядят так:
if (<exception-instance>.InnerException != null &&
<exception-instance>.InnerException.InnerException != null &&
<exception-instance>.InnerException.InnerException is <exception-type>)
в логический метод; мой краткий взгляд ты называешь код таким как минимум 3 раза.
Также я бы порекомендовал извлечь этот второй случай верхнего уровня в метод обработки ошибок; и, возможно, его вложенные операторы if.