There is no error, or not really.
The Timer does not happen as accurately as you might think - it's event driven, and had inherent delays built in due to Windows being a multitasking, message-based system. This means that while the Stopwatch value (which uses a hardware clock to read the current time each time you read it will always be right, any counting you do in the timer assumes that the tick event happens exactly every 1 second - which it doesn't. Try printing the time to the console each time the timer ticks and you will see what I mean.
What I'd suggest is that you set up an external DateTime and set it to DateTime.Now when you start the timer, then work out the time difference in the Tick handler:
Timespan diff = DateTime.Now - dateTimeWeStartedAt;
Rather than relying on counting the ticks yourself.
BTW: Reading the Stopwatch value like that is going to throw up the occasional visual oddity - read the Elapsed property once into a Timespan, and then use that instead of reading it multiple times as it can change between successive reads. Significant changes can occur at the end of minutes, hours, and days!