I have been facing this issue quite sometime when creating a lookup field of a SharePoint list. The main suspect was the title field.
As we create a lookup to a list we tend to use the title field as the lookup field. Also we are tend to rename it in order to easily get the field with link and actions.
For example, lets assume we rename the title field as "Name" with the "MasterList". Still its internal name will be Title.
Now in the child list, we need to lookup the "Master List". What we need to do is simply lookup that name field. We can simply do it through the C# code. But SharePoint creates this within the internal name. So it expects the Title field to be there.
The best way to avoid is setting up internal name when creating the lookup. This prevents any issues with the lookup.
If you are ever mistaken with that and have used the display name, you can simply go to the column settings and save it even without any changes. This is a tricky way to get over there.
Regardless of trick, its always good to use the internal name.