You have the global axis. Transforms(location, rotation, and scale) transform the local axis(data) in reference to the world/global axis. When you apply any transform this makes changes the data to represent the visual transform. To get a grasp of local verses global try this:
1. Open blender and select the default cube. Rotate on x axis -20 degrees. Now imagen that the cube is the upper half of a human and they are blend over at the waist.
2. Hit R then hit z(this is global z) and move mouse. This would be the same rotation as if a person rotated at their hips. Hit z a second time(local z). Now the person would be rotating at the shoulders. Right click to exit.
3. Now apply rotation.(Ctrl+a->rotation). Repeat step 2. You will notice that now when you hit the second z(local) it now rotates the same as the global.
So the answer to your question is you want to apply the rotation when you need the local axis to match the global axis. This is something that comes with experience and a lot of trial and error. It always depends on the model and what your end goal is for that model.