Обычно копирующая программа делает это блоками, а не целым файлом сразу. Я не думаю, что вы можете сделать что-нибудь, чтобы избежать этого, вам придется принять свои алгоритмы, чтобы справиться с этим.
Вы можете попытаться открыть файл с исключительными правами на чтение, которые должны быть предоставлены вашей программе, только когда другая программа закончила копирование и закрыла файл. В противном случае вы получите IOException и можете дождаться следующего изменения. Но это не значит, что вы не должны иметь дело с событиями с множественными изменениями. Открытие текстового файла в блокноте и его временное сохранение приведет к возникновению событий изменения, но файл не будет заблокирован все время.
Другим подходом будет сбор затронутых файлов в течение определенного периода времени, а когда FileSystemWatcher прекращает генерировать события, обрабатывает все файлы одновременно.