If a char() or varchar() column contains runs of spaces, the Copy as HTML function copies the spaces into the HTML verbatim. When displayed, the HTML client collapses the runs of spaces tp a single space.
Copy to HTML should probably convert multiple spaces to multiple
Wrapping the (var)char column in <pre></pre> tags would also preserve the spaces for display, but that changes the font relative to the other data. Perhaps _all_ data cells should be wrapped in <pre></pre> regardless of data type: <td><pre>...data...</pre></td> ? That would display all data the same, render runs of whitespace properly, and would not modify any of the data itself.