I could see a couple of issues here, but without additional information it's a guess.

1. You do not post your RTC Initialization routine so how are you setting up the RTC 12 Hour or 24 Hour mode initially?
1a. After initialization does your project display the correct values before you enter your 12/24 Hour configuration routine?

Note: If you change the 12/24 hour mode at any time with a write to the RTC, you will need to perform a second write to the RTCHour register (noted in the DS Pg 9 last paragraph under "Clock and Calendar").

2. I see that you are looking at the 12/24 hour bit, but I do not see that you are checking/setting the AM/PM bit (RTCHour.5). When the RTC is set for 12 hour mode you might want to set this or the calendar values of the RTC will be off.

3. You did not include your bcd_bin routine so there may be issues there, can't tell without seeing it.
3a. You seem to be converting from BCD to BIN (gosub bcd_bin) when you read and are wanting to change to the other mode (12/24 Hr) but...
I do not see where you are converting from BIN back to BCD before you write back to the RTC.
Unless you are using the "point" variable in a IF/Then or Select Case structure in the bcd_bin routine to select BcdToBin or BinToBcd, again hard to tell without seeing the code. I also assume the TempVar variable holds the converted value from the bcd_bin routine??

Also, if you are using and LCD or other output device, try and display out the variables at different stages of your configuration routine to make sure that the values are what you expect.

Perhaps you might want to post more of your code to see if we can help further.

Just my thoughts.

Regards,