This took me a little bit to fix, but I finally found the problem. To help anyone I the future, I'll detail what I now understand here:
1. Overall, a context variable in PowerApps can be in one of two states of loading (scope); "fully loaded" gives all properties and immediate relationships, and "partially loaded" gives all properties without loading relationships. For example; if I had three tables : country, state, city with obvious parent child relationships and properties (name, abbreviation... etc.)... a "fully loaded" state would have the country table and all its properties available, but a "partially loaded" state would have the properties (like name, abbreviation) available, but you wouldn't be able to access the country parent relationship.
2. That is an important concept to understand, because it applies to how you use the variables... as PowerApps allows you to load a variable in multiple ways... for example:
LookUp & Filter... etc.- loads the variables as "fully loaded" i.e. LookUp(states, state="NY")
Patch - Loads the variable as "partially loaded" i.e. UpdateContext({Patch(states, thisState, {country:us}) will return a partially loaded state.
Accessing a variable as a relationship from a "fully loaded" variable gives you a "partially loaded" variable.. i.e. UpdateContext{thisCountry: thisState.country});
3. Now the final bit. On a screen, Powerapps looks for the most restrictive scope used of a variable, and assumes that in its validation, so even if at the beginning of an "onVisible" property, I use a LookUp to load a variable, if I later update the context with the Patch function, PowerApps assumes all references to the variable are "partially loaded", and writes the error. You need to make sure all updates of a variable are "fully loaded" if you are accessing a parent relationship.
This may seem confusing, but it seemed to work for me (we have.a complex app that we built). Hoping this helps you on your endeavors.