I know the train from Zurich is non-refundable and non-changeable, typically, which puts us at the mercy of on-time air travel!
You've put your finger on the prime issue. If your flight gets delayed, (it happens) and you miss the train at Zurich Hbf, your advance ticket is worthless and you will have to buy new, full fare tickets to get to Florence. There goes that $300 savings. Full fare tickets for 2, second class are 262 EUR, over $300.
You say in June, and there will be a European wide schedule change on June 9 or so. Trenitalia is pretty slow posting the schedule, so they won't show up on the schedule for sale until maybe 2 month's before that date. Normally you can buy tickets 4 month's in advance, but if you are traveling after June 9, you will have to wait for them to go on sale. The schedule does not usually change that much, if at all, but they won't sell tickets until they are officially loaded in the computer.
Now I have done this, but I always leave a 4 hour window from arrival time to train departure time. It can be a pain being jet lagged and having to cool your heels that long when your plane lands right on time. The trains to Milan go every 2 hours, so you also have the options of 3:09 pm and 5:09 pm. The 5:09 looks to have the lowest advance price, 98 EUR for 2 right now. You could tour around Zurich for the afternoon before caching that train, then get to Florence before 11 pm. Get a good nap on the train to Milan. There is not nearly as much scenery as there used to be as they drilled a tunnel straight under the Alps.
I'd book the ticket straight through on Trenitalia. Book ahead as far as you can and they will give you the "Mini" fare on the Zurich-Milan leg, and "Super Economy" on the Milan-Florence leg. You might even get Business class on that leg for the same or lower price.