В целом, то что вы закрыли диалог совершенно не означает, что ваша длительная операция прервалась.
backgroundWorker.CancelAsync(); всего лишь информирует задачу, что её прерывают. Внутри обработчика backgroundWorker должна быть специальная проверка свойства CancellationPending, при установке которого нужно выполнять выход из потока обработки.
Закрытие формы не уничтожает поток с задачей - она будет выполняться, пока не дойдёт до конца.
Скорее всего при повторном открытии формы у вас происходит конфликт с ресурсами, которые уже используются первым потоком обработки.
Если смотреть дальше, то если вы выполняете длительную операцию на сервере, например, длительную хранимую процедуру, то даже закрытие приложения, которое запустило на выполнение эту хранимку, не гарантирует остановку процесса на сервере. Особенно, если процесс изменяет данные. В зависимости от логики сервера процесс может продолжиться до победного конца, может прерваться в какой-нибудь ключевой момент или уйти в длительный откат изменений, чтобы привести всё в состояние до запуска хранимки.