Item.Paths property returns an
ItemPath and with Sitecore 8 they changed the implementation of
ItemPath.GetPath(string from, string separator, ItemPathType type) to use caching internally. However the
separator is not part of the caching key, only the item it self and the
This of course means that the separator used the first time is then cached as part of the path and consecutive calls for this item - until the cache is cleared - will return the cached path, ignoring the specified separator.
It's probably not the most used feature, I ran into this issue when upgrading some legacy code that used this method.
The bug exists in 8.2 Update-2 rev.161221 and has been registered with Sitecore Support with reference number 141772.
They don't currently have a fix, but you could just use something like
Item.Paths.FullPath.Replace('/', '|') instead if you need another separator.