The problem is that the contact bounces and the connection is made and broken a number of times before the contacts settle down into the closed position. Each time the contact bounces off, the pull-ups will try to pull the pin high again. The contact may not go all the way back to the original position but if the level is high enough for even a microsecond the PIC can interpret it as an 'OPEN'. A similar problem occurs when the pushbutton is released. The problem is not as bad in this case though because the contact has to bounce all the way back to the orignal closed position in order to be interpreted as a 'LOW'.
Some switches are a lot less 'bouncy' than others.
One solution is to put a capacitor across the switch. If it is about the right size, the time it takes to charge prevents rapid changes of the state of the pin and sort of average out the bounces which usually last only a milliseconds or two. You would have to play with the size to find what works, usually something between 0.01 and 0.1 mfd. Another electronic solution is a RS flip-flop for each switch. The solution can be done in software.