Finally figured this out.
It seems that the updates to the connector.ClientEnd and connector.SupplierEnd need to be done in that order.
Do it in the opposite order (supplierEnd THEN clientEnd), and mostly nothing gets updated.
Three hours of my life I will never get back. Sigh.
Oh, and a request to @Sparx - please can you start replacing these literal strings with enums? Just saves falling-over with spelling mistakes. Which don't return errors. Grrrr