The quota *does* reset every 24 hours, but the time seems to wander.  Some years ago, I seem to remember it resetting around midnight UTC, but it doesn't anymore.

Recently, [the *SmokeDetector* bot][1] started logging when its quota reset.  Here are the logged times so far:

<pre>
Day and Time (UTC)      Log entry
------------------      --------------
Dec 23  6:04 PM         API quota rolled over with 2001 requests remaining.
Dec 22  6:04 PM         API quota rolled over with 2014 requests remaining.
Dec 21  6:04 PM         API quota rolled over with 2851 requests remaining.
Dec 20  6:04 PM         API quota rolled over with 4665 requests remaining.
Dec 19 11:36 AM         API quota rolled over with 2580 requests remaining.
Dec 18 11:36 AM         API quota rolled over with 2824 requests remaining.
Dec 17  ???             Site + API + Bot glitch.  Rollover not certain.
Dec 16  5:06 PM         API quota rolled over with 1030 requests remaining.
Dec 15  5:05 PM         API quota rolled over with  900 requests remaining.
Dec 14  5:05 PM         API quota rolled over with 1896 requests remaining.
Dec 13  5:05 PM         API quota rolled over with 5506 requests remaining.
Dec 12  5:05 PM         API quota rolled over with 4118 requests remaining.
Dec 11  5:05 PM         API quota rolled over with 2598 requests remaining.
Dec 10  5:05 PM         API quota rolled over with 1640 requests remaining.
Dec  9  5:05 PM         API quota rolled over with 1624 requests remaining.
Dec  8  5:04 PM         API quota rolled over with 1981 requests remaining.
Dec  7  5:04 PM         API quota rolled over with 2866 requests remaining.
Dec  6  5:04 PM         API quota rolled over with 4596 requests remaining.
</pre>

As you can see, the reset times tend to stay constant for a few days, then jump to a new time, then stay constant again.  A "punctuated equilibrium".  
We've yet to ascertain any rhyme or reason to it.


  [1]: https://github.com/Charcoal-SE/SmokeDetector/wiki