Das geht schon. Ich persönlich vermeide das bei $_POST, $_GET etc., weil ich erwarte, dass diese Arrays die originären Werte enthalten, die von außen übermittelt wurden. Bei Erweiterung von fremden Scripten stellt es sich aber immer wieder mal heraus, dass der Inhalt dieser Arrays schon manipuliert wurde.
In dem vorliegenden Fall würde ich das htmlentities() erst dort anwenden, wo der Inhalt der Variable ins HTML eingefügt werden soll, z.B.:
<?php echo htmlentities($_POST['test'], ENT_QUOTES); ?>
An anderer Stelle könnte man irgendwann vielleicht noch das "rohe" $_POST['test'] gebrauchen, z.B. um es in eine E-Mail oder in eine Datenbank einzufügen (in letzterer würde man den Inhalt dann stattdessen z.B. mit mysql_real_escape_string() behandeln)