Wait a minute. All good points really - so I look to my original solution. You have a one month trial, right. So every time your program starts - you check that it's within a day or after the last time you wrote your last start and last end dates.
Timestamp says
install: 20-May-2003 09:14:40 (never updates after install)
start: 20-May-2003 10:00:15
end: 20-May-2003 10:50:34
Your program starts, and asks the system's time:
20-May-2003 10:40:12
So we let the assumption go that there was a time drift that was "auto-corrected" (you know from your control file that 10:40 already happened), don't put up a fuss, it's no big deal. So you put the start time into your control anyway as the most recent time the software started. At exit, you ask the time again, and now it's: 21-May-2003 16:49. Write this as your exit timestamp.
O.K. - you start again...
Timestamp says:
INSTALL: 20-May-2003 09:14:40
START: 20-May-2003 10:40:12
END: 21-May-2003 16:49
Ask the system the time:
19-May-2003 08:42
Compare this against the higher of the two changing dates (dates you assume already happened). Woa, 2 days and 8 hours. Here is where you leave good customer service.
Pop a message box. "The time on this system has changed backwards beyond reasonable expectations. The <program name> has been disabled. \n\n Contact <company> at <contact info> if you believe this message is in error."
Another good hint is a counter of how many times the timestamps are after the current time at start. This will be a decent check to see if someone is trying to spoof you on a daily basis. Pop the same message after 30 general time-stamp failures of more than 1 second.
Finally, I use three timestamps here in case of system hard failure (where you can't capture your end time). You can always capture your start time - but this time alone may not cut it.
Variations of other suggestions are also acceptable, update a timestamp every so many operations, loops or actions - test that.
Of course, what I've mentioned so far will already add several hundred lines (if not more) to your program.
Finally, There is very little you can do about a program being shuttled from one computer to another without using extreme measures. Twice in my carreer, I have run into programs that would check system parameters, and base the product installation key off of these. This is dangerous, and becomes a management nightmare when people do computer upgrades and start calling you for support. Basically it leaves a bad taste in people's mouths - leaving your software on the junk pile, replaced by a competitors product.
If you are concerned both about longevity of demo AND about PC to PC movement - see previous post about dongles. In mass production, they are quite reasonable, and they are relatively easy for a user to understand.