Isso pode acontecer quando a transação expira. Você pode aumentar o tempo limite de sua transação assim (use valores apropriados para a duração esperada de sua transação). O código abaixo é para 15 minutos:
using (TransactionScope scope =
new TransactionScope(TransactionScopeOption.Required,
new System.TimeSpan(0, 15, 0)))
{
// working code here
}
É por isso que poderia ter funcionado para o tamanho de lote 500 e não para 1000.