Dopo il pop viene fatto nuovamente un push di x, quindi lo stack rimane inalterato proprio perché i valori vengono rimessi dentro lo stack.
Lo stack prima si svuota, poi quando l' ultima chiamata (quella in cui isEmptyStack(s) ritorna true) termina viene ripopolato con i push.Se il push lo mettessi prima di sum=somma(s)+x la funzione non terminerebbe mai.
Se vuoi vedere meglio come accadono le cose ti consiglio di usare del breakpoint per vedere passo passo cosa succede.