My FSMs always have two processes: The next state process is clocked and consists of simply registering the next_state value into the current_state. The FSM logic itself is always combinatorial and if I'm not real careful, I will wind up with latches holding values in future states that are totally inappropriate.
I guess the reason I do this is that the combinatorial logic may be kicking off some external process on the upcoming clock. If that start signal doesn't occur until after the next clock edge, the external process is one clock behind. That means, for example, that I can't test an external counter in the very next state because it won't be loaded until the next state.
All of which can be coded around. But since it is easy to avoid latches by having default signal values, there is no reason to add the complication.