No necesitas un bind_result feo con PDO en absoluto.
Sin embargo, tampoco es necesario contar. Por favor, evite acciones innecesarias; solo inflan y ofuscan su código sin ningún motivo.
Piensa primero, ¿qué necesitas de la consulta? ¿Realmente necesitas contar? No. Lo que realmente necesita es solo una bandera, si el usuario existe o no. Por lo tanto, haga una consulta para devolver dicha bandera.
$stmt = $this->pdo->prepare("SELECT 1 FROM users WHERE email=?");
$stmt->execute(array($_POST['email']));
$exists = $stmt->fetchColumn();
Lo mismo ocurre con todas las demás partes del código
//escape the POST data for added protection
En realidad, no "escapas" de ningún dato en este bloque de código y no agregas protección. Sin embargo, no veo ningún sentido en insertar NULL como correo electrónico. ¿Estás seguro de que realmente lo quieres?