I performed this test in my sandbox- There is an object called Object1. When you change a field on it, it triggers a workflow. Workflow sends out email alert. Email alert is using Visualforce Email templates that have merge fields upto several levels (all lookups)
Initially merge field was showing blank when the actual email went out.
I noticed that my user profile did not have FLS to Field2__c. When i provided read access to my profile for that field, merge field worked.
That begs a question - Don't workflows work in System mode where they should have access to all objects, all fields and all records?
Or is it becuase i edited the object1, which set off the workflow, it will work in my user context? If so, does time-based actions also fire under my user context?