Порядок сбора мусора не определен.
У теб в мусор попадают и главный модуль и логгер.
Ergo, один из них умрет раньше и нет способа определить, кто именно.
Как избежать?
Например, логгер можно засунуть в статическое поле, тогда он вообще не умрет.
Еще хорошо не строить вообще логику на финализаторах, сделать модуль IDisposable, явно его диспозить и в Dispose кидать сообщение в логгер.
Вообще выкинь все финализаторы, кроме абсолютно необходимых, чтобы впредь не было таких проблем.