non è il post o il php, ma il browser, che trasforma automaticamente le entities in caratteri quando esegue il parsing della pagina

di conseguenza devi dargli un'altra passata con htmlspecialchars prima di salvarlo nel database


due consigli:

a) evita di passare al browser dati già manovrati perché siano rinviati: il post è invisibile alla maggior parte degli utenti comuni, ma un utente esperto potrebbe modificarlo, costringendoti a rieseguire i controlli di sicurezza e scrivere doppio codice
piuttosto usa una sessione

b) non usare htmlspecialchars, usa htmlentities (con codifica utf-8), in questo modo avrai del codice compatibile xml/xhtml e avrai la sostituzione di " con &quote;