cgminer shows the effective hashrate. It'll be less than the claimed hashrate as it includes the time taken to submit and retrieve results from the device, which will be a few ms. During that time the single is idle. Nothing anyone can do about that.
cgminer gets work long before it runs out of work. That should not impact the hashrate. If there's an issue with TRUE hashrate being low, it's a bug in the BFL device implementation in cgminer. Alas I don't have an FPGA of any sort, including a BFL single, so the code is almost 100% dependent on luke-jr so ping him.