Почему сравнение эта string строка не равна такой же строке после string.Format()?
Потому что сравнение string и сравнение object - это разные вещи.
String сравнивается посимвольно, как и должно быть, а у object сравниваются ссылки на экземпляры.
Переменные client и broker компилятор для оптимизации ссылает на один и тот же экземпляр string, поэтому сравнение их, как object, возвращает True. В случае же agent, создаётся новый экземпляр string (Format вызывает new string()), поэтому сравнение их, как object, возвращает False.
Если нужно чтобы искало одинаковые строки и не генерировала новые, то можно заменить наvar agent = string.Intern(string.Format("{0} {1}", "1", "2"));