Mi sono reso conto che l'esempio era triste perchè si ricadeva nel problema accennato da neida.
Un nuovo pattern risolve il problema

codice:
$string  = "Questo è un testo di prova per trovare 
            tutte le occorrenze della parola testo 
            in un testo. La parola testona non viene
            conteggia";

$pattern = "[^a-zA-Z0-9]testo[^a-zA-Z0-9]";

for($count=0, $offset=0; 
    $match = zz_ereg($pattern, $string, $offset);
    $count++, $offset+=strlen($match));
In questo modo occorre che il carattere prima e dopo testo non sia una lettera o un numero.