I'm not sure things work the way you're describing. I.e., there are no "software" clock process/application which either uses BIOS clock or an ntp server and which can be "broken" in Ubuntu but working in Windows. In any case the info you see on the screen comes from BIOS clock.
If NTP server is enabled, the data coming from it is used to adjust the BIOS/hardware clock, and, when the hardware clock is thought to be "incorrect", NTP daemon adjusts time gradually in small increments instead of setting it straight away. This is done to avoid sudden "jumps" in system time which may cause all sorts of trouble (i.e. an event which happens after some other event but at earlier time).
Which perfectly explains the behaviour you're seeing - as soon as the "correct" data comes from the NTP server, the daemon starts gradually adjusting your system time.
I think your timezone/daylight saving time may be set incorrectly. Another possibility may be that Ubuntu expects the BIOS clock to be set to UTC time while Windows sets the clock in your local timezone, which results in Ubuntu thinking your system clock are late/early by your GMT offset
This document may be helpful: https://help.ubuntu.com/community/UbuntuTime#Multiple%20Boot%20Systems%20Time%20Conflicts