So was play testing and caught messages indoors / underwater and elsewhere about the time of day updates and started wondering if I broke something. Turns out this is a bug in the stock code, which despite the new weather system, is still retained to my knowledge.
In update.c, in function time_update, you'll find this:
if( d->connected == CON_PLAYING && IS_OUTSIDE( d->character ) && IS_AWAKE( d->character ) )
That should probably be something like this, which is how the original weather_update( ) used to work, so I think the inconsistency was just an oversight:
if( d->connected == CON_PLAYING && IS_OUTSIDE( d->character )
&& !NO_WEATHER_SECT( d->character->in_room->sector_type )
&& IS_AWAKE( d->character ) )
That should take care of it.