There isn't a policy around this, and I don't think that there needs to be one.
I starting using struck-out numbers for old versions in imitation of other golfers on this site, so I can't tell you the original rationale. However, I can offer my thoughts as to its utility.
The site stores a history of each post; if a post has been edited then it tells you when it was last edited and provides a link to the full history. However, there's no way of telling how much it has changed without following that link. The struck-out numbers provide a hint about how much history there is, and whether it relates to improvements in the code or in the documentation / discussion. They can also give a hint as to how much optimisation room is likely to be left: if you see 400 300 280 277 then it's probably going to take a lot of effort (or a completely different approach) to improve that answer.
To your specific questions:
But what about when I find a bug, and fixing it will make my code longer?
Why would you want to highlight evidence of your mistake? ;) In this case I would replace the previous count; I think I may on one or two occasions where it affected several previous versions and where the same fix worked for all of them have bumped up the struck-out numbers by the same amount, preserving the history of how much it improved. In those cases I would also have left a note in the body of the answer explaining how to correct the previous versions.
What about when I do ten size improvements, do I keep them all?
Up to you. I think that some people do, but if you want to abbreviate to 400 300 ... 265 264 then I doubt anyone would complain.
And what about if I don't like to include them, is there some danger of not including old counts being perceived in a bad way somehow?
I don't think so.