It turned out that the rebinding code just needed to go further down in the page_load. I discovered this whilst explaining the problem to one of my colleagues. He asked to see the error and got me to cut and paste the code out of the if(!IsPostback) wrapper like I had on Friday. I did this, but on Friday I moved the code up before the wrapper. He just pointed underneath the wrapper and, without thinking about it, I pasted it below the wrapper. The code then worked consistently with no errors.
Just goes to show... a problem shared is sometimes a problem resolved...