When GPU subdivision is enabled the mesh objects remain unsubdivided on
the CPU side, and subdivision should be requested somewhat manually (via
BKE_object_get_evaluated_mesh).
When referencing an object, the Object Info node calls
bke::object_get_evaluated_geometry_set which first checks if a Geometry
Set is present on the object (unless we have a mesh in edit mode). If so
it will return it, if not, the object type is discriminated, which will
return a properly subdivided mesh object via add_final_mesh_as_geometry_component.
The unsubdivided mesh is returned because apparently the check on the
Geometry Set always succeeds (as it is always set in mesh_build_data).
However, the mesh inside this Geometry Set is not subdivided.
This adds a check for a MeshComponent in this Geometry Set, and if one
exists, calls add_final_mesh_as_geometry_component which will ensure
that the mesh is subdivided on the CPU side as well.
Another fix could be to move the check on the existing Geometry Set below
the check on the object type, but I am unsure about the consequences.