Ci sono tante cose in questo codice che non capisto... ad esempio:

$image_sql = "UPDATE prodotti SET immagine_03 = '$new_post_id-03-$immagine_03_rinominata' WHERE id_prodotto = $new_post_id";

$stmt1 = $db->prepare($image_sql);

$stmt1->execute(array($file_name));

L'ultima query viene eseguita sempre, anche se non è stata preparata e anche se non c'è immagine... e lo stesso discorso vale per le altre 2 immagini... dovresti fare la query solo se è stata caricata l'immagini, quindi queste istruzioni vanno spostate...

Ma perchè poi fai l'execute con quella variabile $file_name?

Altra cosa: perchè fai tutte le query 3 volte?
for ($i = 1; $i <= 3; $i++) {