If the products have to be shuffled at midnight, strictly once a day, the most effective way of handling this would be to ensure that the shuffled IDs are stored somewhere independent of the application. There are many reason why the application may reload and solely relying on settings in IIS isn't the most reliable means of controlling this (although they can massively help.)
Personally, if the requirement is as strict as you suggest, I would diregard the IIS configuration and save the shuffled IDs (and date) to a separate table in the database (or something like Redis). If they're in separate rows you'd be able to inner join on them. If they're comma delimited in a single row then you can use LINQ to order your products.
You would cache them in your application setting an absolute expiry set to midnight. If the cache expires whilst the application is running it must be midnight, so re-shuffle the IDs, replace in the database and re-cache. If the application restarts (therefore there is no cache), check the data saved against the IDs in the database, and either re-shuffle if necessary, but then retrieve and cache again.
Either way, if you use IIS configuration or save them to an independent source you still need to re-shuffle the IDs and store them somewhere, so I would keep them independent of the application lifecycle.
Note: If the requirement isn't so strict and you just ned to ensure that the product orders are different on a daily basis but that they could potentially change within the same day, just cache the IDs with an absolute expiry of midnight.
Note: If you're using something like Redis, you can set an auto-expire value on the data, so it would be irrelevant when you updated the data.