Você já tentou configurar
XACT_ABORT
para no início do seu script? SET XACT_ABORT ON
Não relacionado, mas o loop não pode ser escrito como:
-- Continue looping while rows exist
WHILE EXISTS (SELECT 1 FROM [LINKEDSERVER].MasterDatabase.dbo.Logging WITH(NOLOCK)
WHERE [Date] < @ArchiveDate)
Ou melhor ainda, reescreva para que você não atinja a tabela vinculada duas vezes por iteração de loop.