Gira, gira ho trovata la soluzione, un po' farraginosa ma funziona.
In pratica, prima di riselezionare a reset i campi select, deseleziono quello che c'era prima; un po' farraginoso lo ripeto ma funziona, se qualcun altro ha soluzioni migliori lo dica pure
Ecco il javascript modificato, è l'unica cosa da modificare
codice:
$(document).ready(function() 
            {
                var tipo, giorno, mese;
                $('#copia').on('click', function(){
                    tipo = $('#tipologia').val();
                    giorno = $('#giornata').val();
                    mese = $('#mesata').val();
                    $('#annata').val( $('#anno').text() );
                    $('#tipo option[value=' + tipo + ']').attr('selected', true);
                    $('#giorno option[value=' + giorno + ']').attr('selected', true);
                    $('#mese option[value=' + mese + ']').attr('selected', true);
                });
                
                $('#cancella').on('click', function(){
                    if (confirm("Sicuro che vuoi cancellare il form per ricominciare da capo?") === true)
                    {
                        $('form')[0].reset();
                        $('#tipo option[value=' + tipo + ']').attr('selected', false);
                        $('#giorno option[value=' + giorno + ']').attr('selected', false);
                        $('#mese option[value=' + mese + ']').attr('selected', false);
                        $('#tipo option[value=0]').attr('selected', true);
                        $('#giorno option[value=0]').attr('selected', true);
                        $('#mese option[value=0]').attr('selected', true);
                    }
                });
});
In sostanza creo tre variabili globali: tipo, giorno e mese che valorizzo col tasto [copia i valori] e che mi servono per deselezionare i valori selected = false, prima di fare il selected=true con i nuovi valori.
Funziona, anche se non mi piace