I recently wanted to start a simulation using my own temperature and salinity distributions I had from a previous simulation. I managed to do this with help from the paleoclimate liaisons and thought I'd document the procedure here.
In my situation (wanting to take T/S from a CCSM3 run and start a CESM run) I had to interpolate the T/S fields from my old POP grid to my new POP2 grid, I used the coupler mapping files for both my old and new grids as well as the ncl function PopLatLon to do this, but with the new esmf regridding tools available these mapping files shouldn't be needed. I also had to interpolate from 25 vertical levels to 60 levels.
Next I needed a POP restart file from which I could insert my T/S variables. Since I was using a custom POP grid I had to start an 'internal' POP run (i.e. using Levitus T/S) just long enough to produce a restart file (I recommend producing netCDF restart files instead of the default binary files, since netCDF is easier to edit). Once you have produced a restart file you copy your T/S variables that you interpolated above into the restart file; this will become your init_ts_filename in your POP namelist. POP restart files have duplicate variables for each type; e.g. there is TEMP_OLD, TEMP_CUR, SALT_OLD, SALT_CUR. You should use your T/S variables to replaces both the *_OLD and *_CUR variables.
Then build your new CESM case specifying your newly created restart file as your initial TS file. You should also specify init_ts_suboption as 'spunup'. You might get Chrongear or kinetic energy errors if you have a T/S distribution that POP doesn't like, in which case it'll be up to you to 'fiddle' with the T/S distribution until it works (look for any unrealistic/extreme values). Finally make sure that global mean salinity is somewhat realistic still.