È una gara tipica. Controlla se la chiave che hai inserito esiste; in caso contrario, esegue un inserimento, ma qualcun altro può inserire la chiave tra il conteggio e l'inserto. Le transazioni non lo impediscono.
Il codice sembra aspettarsi questo e provare a gestirlo, ma quando ho guardato il codice per gestire questo caso ho potuto vedere immediatamente che era rotto. Segnalato qui:http://code.djangoproject.com/ticket/11569
Consiglio vivamente di attenersi al backend di memcache.