Sounds like a timing issue.
With this large number of transactions, the only way to debug is to run the AppleScript in a script editor, preferably Script Debugger 7.
I would add a log
statement just before each card to identify which card it is failing on.
tell application "Contacts"
repeat with cardPerson in people
set nameOfvCard to name of cardPerson & ".vcf"
log "Card: " & nameOfvCard ### ADD THIS LINE
set outFile to (open for access file (vPath & ":" & nameOfvCard) with write permission)
write (vcard of cardPerson as text) to outFile
close access outFile
end repeat
quit
end tell