Well - double check if there is a current charging the battery first.
Looking at your code you are missing at the end of setAlarms()
// // Enables alarm 1 and 2 and the external interrupt pin.
Clock.turnOnAlarm(1);
Clock.turnOnAlarm(2);
I've not checked but this might be what stores the value really in the registers.
Yep - agree that's somewhat fishy as the Timekeeping Battery Current = 0.84μA while Data-Retention Current = 0,1 μA
So if there is enough current for the crystal then the memory should be working too.
in the library there is a oscillatorCheck() function which returns false if the oscillator has been off for some reason (and thus if this is the case, the time is probably not correct).
could you call that function in your code and see what it tells you when you switch off the arduino? if the battery is working, then the Oscillator Stop Flag (OSF) should not be set and the function call should return true.
I usually either code the I2C myself or use JC library because I'm using DS3232 (which does have 236 bytes of battery-backed SRAM) but that library supports as well DS3231