STM32 VBAT ADC voltage measurement incorrect at low voltages
Looks like it could be noise related. Assuming it is you can try: 


Setting a longer sample time on the ADC and see if the lower end values improve. If that improves somewhat then maybe even take 4-5 readings and average them (potentially ignoring the first).
Measuring the input to the ADC with a scope and see if there really is a noise floor of around 0.5v (seems odd but depending what else is on the circuit)
Potentially check whether there is a seperate power supply pin for the ADC. VREF or AVCC it's sometimes called but depends on the chip. (I know some STM32 chips have this) and attach caps and ferrites to make the reference voltage cleaner.
Worst case try and use an external ADC pin to your battery and see if thats better. If it is then it seems unique to the internal VBAT ADC circuitry which could be an STM problem and not your own. (Check the errata documents for your chip. They will normally publish known issues there)