The answer (at least for know, from what I've learned) is that there's no flag associated with a WorkflowInstance that you can retrieve for a given instance indicating whether the instance has completed.
The two approaches available are:
WorkflowRuntime.WorkflowCompleted Event
Using a TrackingService service to keep a 'log' of workflow execution and quering the log to destermine if a workflow instance has completed. Here is a good introductory atricle. With this approach the only available out-of-the-box implementation of TrackingService is SqlTrackingService, which requires a SQL Server database. You can then use SqlTrackingQuery to query the 'log'
Note: An interesting aspect of the behaviour of SqlTrackingService is that it won't by default immediatly write the messages it receives from the runtime to the database, but only at the end of transactions. This behaviour is controlled by IsTransactional property of SqlTrackingService.