Logo depois que postei isso, consegui resolvê-lo. Acontece que o vsftpd limita a quantidade de memória virtual disponível usando setrlimit(RLIMIT_AS, limit)
Eu acho que isso foi bom em 32 bits, mas estava esgotando isso em 64 bits. Eu não me preocupei em encontrar um limite exato onde este problema ocorre, mas recompilar o vsftpd e alterar VSFTP_AS_LIMIT
no defs.h
do vsftpd para triplicar o limite removeu o problema e o módulo PAM está funcionando muito bem.