I seem to have caught a side effect of hw pwm. If you stop/dispose the pwm during a high wave, my servo moves on dispose. I assume because the cut off happens at some random high time. The servo thinks that is next edge and moves to that position and then stops on low.
Seems we need an overload on Dispose (or Stop) that will block until a current high wave goes low and then stay low. I am almost positive this is what is happening. As experimenting with various Sleep/Delay times, will produce different servo moves at end. In this case, using 1002 must have been a low spot, as it does not move on dispose. Change it to 1000, and it moves. I also think you can have similiar behavior when setting next SetPulse() depending on where you are in the wave. This is a bit more dangerous as it can happen in the middle of stream of moves.
ss.SetPosition(center); Thread.Sleep(1002); // Allow to center. Note odd sleep time required. Else servo moves on dispose call. // Would seem to Need an overload to not cut off until current High wave goes low. ss.Dispose();