Как уже отмечали другие, это соответствует документации.Вы не должны полагаться на то, что GetHashCode всегда возвращает одно и то же.Единственный инвариант, на который вы можете положиться, это то, что будет возвращать то же значение для того же объекта в том же домене приложения, если объект не был изменен каким-либо образом, который изменяет его семантику равенства .Если какое-либо из этих условий не выполняется - если два объекта находятся в разных доменах приложения или объект был изменен таким образом, что изменяет его семантику равенства - то у вас нет никаких гарантий, что «идентичные» объекты вернут один и тот же хешcode.
Единственное, для чего вы должны использовать хеш-код, - это сбалансировать хеш-таблицу. Любое другое использование не по назначению и на ваш страх и риск.Не делай этого.Если вам нужен стабильный строковый хеш, который работает через произвольные границы, используйте алгоритм промышленного стандарта, такой как SHA256 или что-то в этом роде.
Смотрите мой архив статей о проблемах хеширования, если вас интересует эта тема:
http://blogs.msdn.com/b/ericlippert/archive/tags/hashing/