TL;DR: use MM dd yyyy for your date pattern formatters. Notice the lowercase d and y. Case matters.
SalesForce uses Java for its date and time patterns, not *nix as I presumed. YYYY is not the same as yyyy. The former is called week year, and is based on the week numbers for the year. Week numbers can go up to 53 due to partial weeks at the beginning and end of the year, and essentially that is why YYYY can be one-off from yyyy in the first or last week of the year.
In our SalesForce NPSP settings, we have the Opportunity name fields automatically set by a formula to include the last name, program code, and date. It was originally set to MMYY, but as we now know, that is wrong. Switching it to MMyy makes everything work perfectly. Of course now I have to go clean up the names of all those donations made in week 1 or 53. And like most non-profits, we get a substantial number in the last week of December.