Ok, after a lot of research into this issue, I finally understand what is happening. I am posting the scenario here so that others who come across it may understand. Thanks to everyone who helped me.
If you have a datasource and a gridview that references the datasource on your page, the grid is automatically databound to the datasource. It decides whether or not it needs to be databound by a flag - 'RequiresDataBinding'. The flag is set depending on several factors; whether there is a viewstate for the gridview and whether the datasource has changed in some way. If a viewstate exists and the datasource is unchanged then the gridview is not databound. If the view state does not exist or the datasource has changed then the gridview is databound.
The gridview is loaded straight after page_load and rendered (where the databinding occurs) straight after the page PreRender event. For the 'RequiresDataBinding' flag to be set to true, the datasource must be changed (eg filter added) between these events.
Basically, if you set the filtertouse property in page_load then you must either turn off the viewstate for the gridview or manually bind the grid. If neither of these are appropriate then (and this is the better course of action) set the filtertouse property in the pages LoadComplete event.
I hope this helps people out in future so that they do not spend hours chasing the wrong thing down like I did!!
Darren