I've read in many sources that St. Moritz isn't a particularly desirable destination except for skiing. It is said Pontresina is a better choice, being a considerably more attractive town--though it occurs to me these comments may have been based on summer, rather than winter, trips to the area. In any case, I suspect you need to be prepared for price shock on a January weekend in Swiss skiing areas. But this is a great opportunity to see the Alps in mid-winter since you'll already be fairly close by in Milan. I would guess hotel rates will rise between now and the time of your trip.
It is possible to make a loop through southern/central Switzerland so you don't need to go out and back on the Bernina route between Tirano and Chur. Others here will be able to make routing suggestions, including which trains should be avoided since they spend a great deal of time in long tunnels. I know there are trains south from Lugano to Milan, but tunnel-minimization research is advised.
I opted to go from Milan west to Domodossola, where I picked up the slow and scenic Centovalli train to Locarno. (I consider the Centovalli trip very worthwhile, but it isn't as over-the-top dramatic as the Bernina route, and I am not promoting it as a substitute.) I spent a couple of nights in nearby Bellinzona for some local sightseeing, which you wouldn't want to do if you're looking to spend a bit of time on snow activities. Then I traveled north to Andermatt and then east though Disentis to Chur before picking up a train on the Bernina route south to Tirano the same day. That Bellinzona-to-Tirano day was fairly long, but the scenery was excellent, and I had bought a bargain-priced Swiss Day Pass when it went on sale for my travel date, making the rail-ticket cost for that long travel day less than $60 US.