А с чего бы ему становиться INVALID_HANDLE_VALUE? Это может вернуть только CreateFile при открытии. А не само по себе произойти. А надо делать так - что если GetOverlappedResult выдаст ошибку, после того, как overlapped вылезла из IoCompletionPort'а (или в ней, в оверлапе, взвелся Event), то, проанализировав этот код ошибки, принимать решение о восстановлении связи.