When the same stroke was used as a driver variable, this could make this
stroke already tagged as built in the course of building driver
variables (via build_gpencil), but then important stuff from
build_object_data_geometry_datablock could be missed later on (because
both of these funtions use checkIsBuiltAndTag). Most importantly,
setting up operations such as GEOMETRY_EVAL would be skipped entirely.
build_object_data_geometry_datablock seems to cover greasepencil just
fine (does the same as build_gpencil and more). Proposed solution is to remove build_gpencil entirely. In build_id it would then also call build_object_data_geometry_datablock for ID_GD IDs. Now the covered types that _call_ build_object_data_geometry_datablock match exactly to what is covered _inside_ build_object_data_geometry_datablock.
Think this "duplication" of functionality was just overseen in rB66da2f537ae8 [build_gpencil existed long before and said commit made greasepencil a real object with geometry and such].
thx @Jacques Lucke (JacquesLucke) for additional input!
