Ben,
Thanks for the response.
After I posted my original question, I commented out the read_time() call and hard-coded the time and date into the set_time() function, to prove to myself that the problem was NOT in set_time(). That worked.
I'm using the Arduino 1.6.5 development environment, which has a crude dumb terminal interface. I removed my sledgehammer code and restored the call to read_time(), and this time used a "real" terminal emulator, Anzio Lite, to enter the time/date. That worked, too.
My guess is that when I hit "SEND" on the stock terminal interface, it inserts a newline or LF/CR into the data stream. That may have been picked up by the read_int() and popped into the year variable.
I'm not positive that the stock terminal interface is the problem, but it worked fine using Anzio to communicate with my stack.
BTW, I'm building an infrared "people counter" for use on a bike trail (or in a doorway, where ever one needs to count people!). My stack contains a TinyDuino, the RTC board, a microSD board, and a proto board to connect the infrared detector and a temperature/humidity sensor. I've already built a prototype using a SparkFun Redboard and an RTC-datalogging shield. The Tiny stuff looks like I can do a low-power version I can run for a couple of months off a 5v 3AH portable USB charger, sleeping most of the time, and waking up on an interrupt from the IR sensor to time-stamp an entry into the CSV logfile. I'm going to log IR "hits", timestamp, temp, humidity, and voltage so I can get some long term metrics on how long I can power this thing.
Thanks again for your response,
RLW