il fatto che una funzione richiamata onclick su un input di tipo submit ritorni false non ferma l' invio, lo fa se la funzione la richiami all' onsubmit del form

codice:
function check_works_form(){
    var bool=true;
    if (document.works_form.title.value=="") {
        alert('Non hai inserito alcun titolo');
        bool=false;
    }
    else if (document.works_form.photo.value=="1" && document.works_form.photo_chooser.value=="") {
        alert('Hai attivato la casella 'foto' ma non ne hai selezionata nessuna');
        bool=false;
    }
    else if (document.works_form.description.value=="") {
        alert('Non hai inserito alcuna descrizione');
        bool=false;
    }
    if(bool) upload_alert();
    return bool;
}
<form onsubmit="return check_works_form()">
rimuovendo quello che hai al momento nell' onclick sul tasto submit

ciao