Differences in programming method

I use the userblock to store our parameters an recover them when a firmware version change happens.
I did all my testing using the serial programming cable and the code recovers that data and everything works great, then I tried to do an update over UDP and the code thinks the UB is corrupted and loads factory defaults.

What differences would there be to the UB depending upon the programming method?

My method of determining if the UB is valid is a string (containing the product type and firmware version eg. “47 2.10”) at the front and end of a struct ( to determine if the struct is intact) if they match then the UB is intact, I then check the last element in the struct to a constant that was defined in code to determine if the firmware has been upgraded. LIke I mentioned using the cable it works great, when I upload using UDPDownload the first and last element in the struct are garbage and it fails.

Can anyone give me insight?