Within guac_terminal_copy_columns(), the calculations which determine the region(s) that should be prepared for overwrite are wrong. The overwrite region should be the source region AND:
1. Destination start (inclusive) to destination end (inclusive), if destination region does NOT intersect source region
2. Destination start (inclusive) to source start (exclusive), if destination region intersects source region and offset is negative
3. Source end (exclusive) to destination end (inclusive), if destination region intersects source region and offset is positive
It may be better to rename the "overwrite" function to something along the lines of "force character alignment", as the function is needed in some cases where data is not being modified per se (like the source region, as described above).