Я столкнулся с очень похожей ситуацией. Когда пользователь выходит из приложения, возникает исключение AccessViolationException. Причиной было то, что у меня был код, все еще работающий в фоновом потоке, и этот код регистрировался (используя NLog).
В конечном итоге NLog пытается создать FileStream во время завершения работы Silverlight, что приводит к ошибке.
Если вы включаете разрыв, когда в visual studio генерируется исключение (ctrl + alt + e), это помогает точно определить.
После того, как я понял, что это нужно исправить, я должен был остановить все мои фоновые потоки, прежде чем позволить приложению выйти. Это было не так уж плохо для меня, так как я использовал MEF, я мог просто утилизировать контейнер и реализовывать IDisposable там, где это необходимо.