Questa query sta eliminando tutte le categorie dal tuo post perché lo stai dicendo a te con la clausola where. Stai essenzialmente dicendo, rimuovi ogni record dalla tabella post_categories che ha un post id =$post_id. Devi aggiungere alla tua clausola where per renderla più specifica.
$delete_id = mysqli_query($mysqli,"DELETE FROM posts_categories WHERE post_id = '" . $post_id . "' AND categoryID = '". $query_cat_id[$x] ."'");
Questo ora dice la stessa cosa che hai fatto tu ma aggiunge un qualificatore extra. Elimina solo le righe dalla tabella in cui post_id è $post_id e l'ID della categoria è (valore della tua casella di controllo deselezionata).
Disclaimer:sto provando a indovinare dove stai memorizzando gli ID di categoria nella tua funzione ($query_cat_id[$x]).