Я полагаю, что делегаты являются неизменяемыми, поэтому, где вы установили:
copyOfDelegate = tester.PrintCallback;
И затем:
PrintCallback -= new DelegateTester.PrintDelegate(client.Print);
Вы фактически присвоили исходный экземпляр делегата copyOfDelegate
,и затем создается новый делегат при назначении на Printcallback
из-за неизменности.