I struggled for quite some time to troubleshoot this issue when i had a ORDER BY clause in my source table (Derived table) and the column i used in search condition (ON condition) doesn't have a unique constriant/index the MERGE simply breaks. I have to say that because i have observed really strange behaviours For example : "Attempting to set a non-NULL-able column's value to NULL.", some times it throws a similar error message with a column which is nullable, it runs fine if i remove the ORDER BY , it runs fine if reduce the length of a nvarchar field in my source table ! etc.,
But the good news is i have managed to create a simple repro so that you can re produce it in-house and see what's going wrong.
The re-pro i have created for you produces the error only when the source table doesn't have a PK but in my actual scneario i do have a PK but it was failing with the same error and could fix it by creating unique index on the column i used on the search condition.