No es que haya una guía específica para determinar cómo declarar cada propiedad o método, todo depende de lo que vas a hacer con cada una y tal vez una serie de preguntas pueda servir como punto de partida:
 
¿Necesitas que la propiedad sea de solo lectura?
Sí: private y hay que crear un método para establecer/devolver el valor actual (setter/getter)
No: public 
¿Quieres que la propiedad se pueda modificar fuera de la clase?
Sí: public
No: private 
¿Puede haber repercusiones si la propiedad se modifica fuera de la clase?
Sí, debería modificarse por un método para aplicar otras acciones: private
No, no hay otras propiedades o métodos que dependan de este valor: public 
¿Hay riesgos en tener propiedades públicas pero te da flojera crear setters y getters? 

Sí: public 

No: private 
¿Cuándo usar protected?
Cuando tengas clases que extienden otras y necesites acceder a propiedades y métodos desde la clase base y la extendida, evitando accesos desde fuera