The specular lighting equation is pretty simple
specular = specular_amount * pow(saturate(dot(reflection, input.viewDirection)), specular_power);
So specular_amount (Specular in the material) affects the brightness of the specular effect.
specular_power (SpecularPow in the material) affects the angular range between surface normal and view direction that produces a specular hi-light.
Breaking the equation down
dot(reflection, input.viewDirection)This is the cosine of the angle between the reflection ray and the view direction (-1 to 1)
saturate clamps the input between 0 and 1
pow raises the value to a power so pow(x,2) = x*x pow(x,3) = x*x*x and so on
Since the value you are using is between 0 and 1, the specular power is extremely powerful.
Value | Power | Result |
0.5 | 1 | 0.5 |
0.5 | 2 | 0.25 |
0.5 | 3 | 0.125 |
0.5 | 4 | 0.0625 |
You can see that once you get above about 4 the value of the equation starts to disappear fast.
I have seen specular powers of 50 set in some materials
pow(0.9,50) = 0.00515377520732011331036461129766 so even what you would expect to be a bright specular hi-light disappears to nothing.
Note as well that values less than one can be used, but that will make things very shiny
pow(0.1,0.1) = 0.79432823472428150206591828283639
But due to the nature of the maths it is quite safe to do so, the result can never be greater than 1
Never ever use a specular power less than or equal to 0 though.
Less than 0 is nasty and zero will always return 1
I hope this hasn't bored you

I just want people to understand how it works so they can make informed decisions about which values to use rather than guessing and potentially having to do multiple tests before they are happy.