Maybe it's worth adding TGUID.Empty check in TObjectManager.Find?
function TObjectManager.Find<E>(const IdValue: TGuid): E;
begin
// >>>
if IdValue.IsEmpty then
Exit(nil);
// <<<
Result := Find<E>(GuidToString(IdValue));
end;
Or doing this using a new property "ProhibitFetchEmptyGUID" on TObjectManager, so that current behaviour does not change?