I've experimented with projections of shapes, used the official provided grid beta2007 for germany and noticed differences between transforming by double exporting over custom CRS in QGIS and ogr2ogr of around 0.8-1.0 metres...
Perhaps it's happening because of false strings... I don't see it :)
Exporting I've got the following custom CRS DHDN GK3 with the grid (EPSG:31467):
+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs +nadgrids=X:\gridshift\BETA2007.gsb +wktext
Exported the shape with this CRS, loaded it into QGIS and exported it again to an custom CRS ETRS89 / UTM zone 32N with leading 32 (EPSG:4647), this is also the project CRS, on-the-fly projection is enabled:
+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +towgs84=0,0,0,0,0,0,0
Doing the same thing shorter with ogr2ogr
ogr2ogr -f "ERSI Shapefile" utm32.shp gk3.shp -s_srs "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs +nadgrids=X:\gridshift\BETA2007.gsb +wktext" -t_srs "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +towgs84=0,0,0,0,0,0,0"
Why does this happen?