I use v.extract module in a python script : grass.run_command('v.extract', input=UH, output=centroids, type='centroid', overwrite='True', stdout = DEVNULL, stderr = DEVNULL)
red : GRASS v.extract, blue : QGIS. One of my colleague observed the same with its own shapefile. SAGA module (Polygon centroids) gives same result as QGIS. It seems that v.extract calculation isn't correct.