Thanks. As long as the script variables aren't reset when the player leaves the cell they're running in, it should continue to work. But my test was with my companions, who were both standing right next to me. I'm using the same technique to add food spoilage for a FO3 mod, and I'm pretty sure it worked - I sold some meat to a vendor, and came back a few days later and the vendor had the right number of spoiled food items in their inventory. NV seems to have inventory bugs though, like the way that items will disappear if you have more than one of the same condition in your inventory (even if one of them has mods installed...)
The way the script works, the beverage determines what it's container is via getcontainer. It also stores the current gamedayspassed in a timer variable. For warm beverages, if the container is not an actor, or is one of the ED-E refs, and has a Cold Fission Froster in its inventory, the timer is not updated. Otherwise it is continuously updated with the current number of gamedayspassed. So in the first case, that the item is in a valid refrigerator container, the difference between the stored time value and the current gamedayspassed will increase as gametime passes. Once the difference is greater that 0.04 days (1 hour) the item puts a chilled version of itself into the container, and then removes itself. As far as I know, if the item is not in the same cell as the player and its script is not processing, but the script's variables are not reset, the timer variable will not update while the player is in another cell. When the player reenters the cell, the timer will be updated if the container is not a refrigerator, but if it is a refrigerator, the swap should happen if enough gametime has elapsed. I rewrote the script to make it a bit simpler, but still no luck.
scn IMCNWarmBeerScriptref rContainershort sDoOncefloat fChillTimershort sWaitedbegin gamemode IF fChillTimer == 0 set fChillTimer to gamedayspassed ELSEif rContainer != getcontainer || rContainer == 0 set rContainer to getcontainer ELSEif rContainer.getitemcount IMCNFroster == 0 || (rContainer.isActor && rContainer != EDE1Ref && rContainer != EDE2Ref && rContainer != EDE3Ref) set fChillTimer to gamedayspassed ELSEif fChillTimer + 0.04 < gamedayspassed && sDoOnce == 0 && sWaited == 0 ; roughly 1 hour set sDoOnce to 1 rContainer.additem BeerIMCNIced 1 1 removeme ENDifend