During the transition from SLEEP state / GPS_IDLE_MODE to RUNNING state, the GPS core library is not started, therefore by default the used mode is GPS_START_MODE using gps_start() API. The other modes GPS_WARM_START, GPS_COLD_START, GPS_FACTCOLD_START are not available while starting from SLEEP State. So make sure that the gps_start() API is called after the reception of GPS_IDLE_MODE.
What I didn’t say was that after sending the GPS_IDLE_MODE sleep command I wait for the GPS_SLEEP_EVENT to show that the module is sleeping. After this, I call gps_start(). gps_start MUST have a start parameter, and GPS_HOT_START is a valid starting mode from sleep (see below from Location Plug-in development guide).
Anyway, I have contacted Sierra Wireless, and they have confirmed a bug and have passed it through to SiRF. At this point they are advising a change in use case to reduce the impact of the bug, and are suggesting using GPS_HIBERNATE_MODE instead of GPS_IDLE_MODE when sleeping. When I hear anything more I will post here.