Porque la función devuelve 0, que es la posición en la que la letra "p" se encuentra en esa palabra. Al hacer una comparación flexible (con ==), es verdadero que 0 == false. strpos() debe usarse siempre con comparaciones estrictas (===), osea:
Código PHP:
<?php
$palabra = 'palabra';
if (strpos($palabra, 'p') === false) {
echo $palabra . ' no contiene la letra p';
} else {
echo $palabra . ' contiene la letra p';
}