I finally managed to track this down. The problem wasn't actually where I'd thought it was.

I was passing in a parameter from my VB code, but the parameter field in the report was a string (despite the fact that it relates to a SmallDateTime field in the underlying stored procedure), and I was passing in a date. It was at that point that it translated it incorrectly, so the SP received a parameter value of 07-Dec-2012 and therefore passed that back out. I've had to get my VB code to do a ToString("dd-MMMM-yyyy") on my parameter, and it now works.