Thank you for you forum post and sorry that you have encountered a problem.
I was able to reproduce the problem using SQL Compare V10.4 and can confirm that the two reported problems are bugs in our software.
In my experience, the data type Varchar(MAX) is used when the number of characters exceeds 8000 characters.
To answer your first question:
I did some testing, and this doesn't seem to be the case, but it makes me nervous. Is there any way I lose data going from varchar(8000) to varchar(MAX)??
In theory, you should not lose any data. However it is always good practise to backup the target database before deploying any changes to it.
To answer your second question:
When I make my upgrade scripts, I always make the rollback script by reversing the comparison. The rollback version - changing from Varchar(MAX) to varchar(8000) gives me no warnings. I'm pretty sure that could lead to data loss - why no warning here?
Yes the data truncation warning should appear as you are correct, moving from Varchar(MAX) to Varchar(8000) could result in a loss of if the data string exceeds 8000 characters before deploying the change.
I suspect that both the reported problems are related and I will need to submit a Bug Report for the SQL Compare Development team to consider. I will provide a further update with the Bug Report Reference Number once I have created and submitted the Bug Report.
Thank you for bringing this issue to our attention.