Hey, it does not seem to be a problem exactly with your code.
One possible fallout can be that your c<space>c is really a c<tab>c, but while on display it looks like one single space. A <tab> moves the character to next tab stop.
I can't reproduce the problem either. Only spaces are removed in my test file and it all works beautifully well.
So either it's a version that's different enough (GNU sed v4.2.1 here) or the characters you replace are really just multiple spaces. Try 'hexdump -C textfile' or use the sequence 'ga' in normal mode in vim to get info about the character under your cursor.
A tab does not have fix length, it depends on how much space the previous word occupies, it can look like 4 spaces, and sometimes 1 space when displayed on your console.
A tab character is designed to help you produce tables using columns that are aligned with each other. If it always produced a fixed number of spaces it would be pretty pointless in aligning columns, wouldn't it? You can read all about it here: Tab key - Wikipedia, the free encyclopedia