Я думаю, что метод File.Exists является наиболее элегантным.Вы можете поиграть с отражением, чтобы попытаться угадать первопричину, но это того не стоит.Возможно, InnerException настроен на что-то более отчетливое.Это null?
И свойство Message должно описывать (на английском или на любом другом языке, который вы используете), что именно произошло.Полагаться на строку, возвращаемую Message, также не очень хорошая идея.
Мне нравится ваша идея, если честно.