To ensure there are no side effects - at least to ensure that that object in question is not mutated. I think const refs are a little more useful than const pointers for this.
I've never found a need for it. I usually don't care if the pointer itself is modified, particularly since such modifications are usually local and obvious.
I admittedly don't use C++ that frequently, but if I make my code const-correct it always seems to cause a lot of false positives, while seldom finding actual bugs.