Sorry I haven't gotten back to you sooner, didn't know the answers off the top of my head so I moved on to other questions I could answer quicker. So, the idea behind playdate.stop() was if your game doesn't need to be constantly updating--say, it displays the current state of the game and doesn't do anything until a button is pressed--it can call that to stop the update() callbacks and save some battery life. I added that very early in development (git says July of 2014!) and I'm not sure anyone's ever used it. Looks like there are a few instances of it in the Single File Examples folder but it's not really used for anything. Anyway, playdate.stop() predates timers by a long while and since it never wound up getting used for anything it was never tested alongside them.
CoreLibs/timer.lua uses the playdate.getCurrentTimeMilliseconds() as a time base and I don't think playdate.stop() should stop that clock. It's reasonable that even if you're entirely button-driven you still might want to know how long the game has been running without having to use the date/time functions. Looking at the code, I think you can get this working like you expect if you pause the timer when you call playdate.stop() and add this to the playdate.timer:start() function in CoreLibs/timer.lua:
timer._lastTime = playdate.getCurrentTimeMilliseconds()
We have a bug open on timers jumping ahead after unpausing but Dan's been busy. I'll submit this as a possible fix and we'll get it into a future release, but the nice thing about having the code in CoreLibs is you can fix it on your end now. ![]()