I see that the WorkflowInstance table includes a column called WorkflowData. This is null for all entries in our environment.
Is there a way that I can store details about the workflow instance in this field? This would allow me to generate a report that displays workflow instances with relevant business metadata.
Otherwise I will need to create my own table and join this with the WorkflowInstance table
I really think you shouldn't manipulate that table in the database.
Did you check out the "Store Data" action? It's used to store data inside a workflow that then can be retrieved by other workflows. I'm not sure where it put's the data but as it's saved directly in the workflow instance I can imagine that the data goes to the WorkflowData Field in the database.
Another option would be Nintex Hawkeye, where you can send data to hawkeye by using beacon actions. This method is specifically designed for driving reports on your workflows. Did you have a look at this too?