Você não precisa de um bind_result feio com PDO.
No entanto, você também não precisa contar. Por favor, evite ações desnecessárias - elas apenas incham e ofuscam seu código sem motivo.
Pense primeiro, o que você precisa da consulta? Você realmente precisa contar? Não. O que você realmente precisa é apenas um sinalizador - se o usuário existir ou não. Portanto, faça uma consulta para retornar esse sinalizador.
$stmt = $this->pdo->prepare("SELECT 1 FROM users WHERE email=?");
$stmt->execute(array($_POST['email']));
$exists = $stmt->fetchColumn();
O mesmo vale para todas as outras partes do código
//escape the POST data for added protection
Na verdade, você não "escapa" nenhum dado neste bloco de código e não adiciona nenhuma proteção. No entanto, não vejo absolutamente nenhum ponto em inserir NULL como email. Tem certeza que você realmente quer?