Ouch, i'm in the love Venice camp and not so crazy about Florence camp. So your revision breaks my heart, not that it matters though.
In my personal opinion, experiencing Venice by going from the train staion to the cruise terminal and then from the deck of a cruise ship 8-12 stories above the water line as you float down the Guideca Canal and out the lagoon into the Adriatic should violate several international treaties. Unfortunately it doesn't and people do it all the time.
I'm personally too much of worrier to arrive on the day of departure for a cruise even though you seem to have plenty of time to do that and lots of people do.
So for my money (and it isn't is it?) you have maybe four choices that would work.
Original plan - not bad just the travel to sightseeing ratio is high. Solution try to get an early start both travel days. only about 1 1/2 hour Rome/Florence and you're having lunch in Florence.
Stay the night, do the same to Venice the next day. leave Florence by 10:30 and you're having lunch beside the GrandCanal by 13:00. (2 hour trip)
Spend all your extra time in Rome, more than enough stuff to keep you more than busy for the four days. Hop the train and in 4 hours you're in Venice. Although I'd still do three nights Rome and one Venice. Mainly cause I'd worry about a meteor hitting the train track and missing the cruise boarding, but that's just me. ;-)
Do Florence as a drive by pit stop on your way to Venice. Leave Rome by 8am arrive Florence 9:30, stash luggage at train station. Lunch, sight see, get the flavor, dash back to the station, leave Florence by 16:30 arrive Venice 18:30, checked into hotel and having dinner by 20:00. Or leave an hour later and push everything back an hour, dinner by 21:00
Your new plan, which you've seen my thoughts on that.