as you can see from the responses, there's a bunch of different ways.
if you are talking about one animation of particles spraying and then freezing, then you shouldn't be thinking about setting any initial states, that is a form of baking the simulation and you don't want to be baking anything.
connecting your own animation curve to the currentTime attribute is a good one, but you are not really trying to change the time of your particles, you just want to slow them down until they become ice. if you key the currentTime attribute then things like ramps will behave strangely because the particles age will not be incrementing linearly.
keying the isDynamic attribute is a simple way of stoppping the particles, but that again just stops everything and your expressions will no longer evaluate.
if you want the particles to all freeze at once, uniformly, you can animate the conserve attribute going down to 0, this will give you easy control over the rate of freezing.
if you want the particles to freeze from the spray emission source out to the tip of the spray or something along those lines, you can use a ramp on the velocity. that way, you can control when the velocity is slowing down based on age of particle. you can animate the position and color of the ramp entries to control whether the slow down happens from base of spray (birth) to tip (death) or vice versa.
i would then suggest writing an expression that as the particles slow down beyond a certain velocity, they emit blobby particles. these blobby particles should have random sizes that scale based on their age so that they are born with a size of 0 and slowly scale up. this will make the spray look like it is freezing into a solid surface.
don't forget to add mist and steam as the freezing occurs, again this can be done through an emit command.
and add some chunks of ice breaking off and falling.