First off, to gain protection from SQL injection through prepared statements, you need to use bound paramters
$stmt = $this->connection->prepare("SELECT password, userlevel FROM ".TBL_USERS." WHERE username = :username");
# username and :username as array key will both work
$stmt->execute(array('username' => $username);
Next up, you should always check for success / failure (which you should have done in your old solution as well)
$stmt->setFetchMode(PDO::FETCH_ASSOC);
if (!$stmt->execute())
{
printf('<pre>%s</pre>', print_r($stmt->errorInfo(),1));
}
elseif ($arr = $stmt->fetch())
{
printf('<pre>%s</pre>', print_r($arr,1));
}
The only thing I see that is different is strip_slashes, which means that if the password contains any slashes, it will not pass your ifcheck.
Have you tried to output the contents of $dbarray?