UBO's are updated as soon as you update the buffer memory, when drawing you record commands then pass them to the GPU to execute. I would guess you have a loop where you update the UBO then draw a mesh and you repeat this x times. The thing is the commands aren't executed till the end so I you are probably always getting the last UBO value. This is a big mindset change compared to opengl.
Just a guess on my part but i had a similar issue myself