That's my method, too. I hold off bouncing/freezing as long as practical, to leave my options open. For example, I might want to insert a measure or a tempo change, and it's hard to do that once soft synths have been rendered. But just as soon as I'm happy with my MIDI parts, they get frozen because I'm impatient and hate waiting for stuff to load.
One potential problem with exporting a large un-rendered project: some samples may not have loaded yet, which can result in lost notes in the export. If I want to export a project that has un-rendered/un-frozen instruments, I take precautions. First, while the project's loading I go get coffee. Waiting a few minutes helps assure that sampled instruments have time to load completely. When I get back with my coffee, I play the project once from beginning to end once, just to make sure. (Another benefit: often, kicking back and listening to that pre-export run-through reveals a problem I hadn't noticed while in the midst of mixing.)
Of course, all this could be moot if you've simply exhausted your computer's horsepower. In that case, freezing is your only option. When faced with that problem, I assume a compromise strategy and freeze just my most-demanding track(s). Often, freezing just one of the big instruments makes a big project playable without dropouts.
Also, make sure you are bumping your audio buffers up to their maximum size during the mixing and mastering phase of your project. Once you're done playing soft synths in real time, there's no need to keep latency low. Set your interface's buffers to their maximum size.