My usual suspect would have been the NAS drive or network not having the capacity but I already used Boxee (which is based on xbmc) on a pc connected to the same switch using the same NAS so I was pretty confident I should start looking at either the Pi or xbmc.
Some google searches led me to look at increasing the cache memory size xbmc uses when streaming over a network.
This value is stored in an xml element the ~/.xbmc/userdata/advancedsettings.xml file, which can be modified by using ssh to connect to the Pi while xbmc is running (go to System, Information to find out the IP address).
See if the file exists, some later releases of raspbmc dont have any advanced settings and therefore no advancedsettings.xml file:
If the file exists, you should see an output similar to this.
The value we are interested in is:
which is "the number of bytes used for buffering streams ahead in memory XBMC will not buffer ahead more than this. WARNING: for the bytes set here, XBMC will consume 3x the amount of RAM"
I'm not sure why the value of 5282880 has been picked, I can only assume whoever set it was trying to set the it to 5mb, being 5x1024x1024 = 5242880 but got a digit wrong.
I went for double at 10mb or 10*1024*1024 = 10485760 which seemed to resolve my buffering issues, although different values may work better for others.
Edit or create a advancedsettings.xml file
If the file exists change:
If the file doesn't exist insert the following:
Ctrl X to save and reboot
I haven't noticed any adverse effects of giving XBMC a greater memory cache on the Raspberry Pi, but anyone knows issues of doing this, let me know.