I'm going to try using a few different values for the duty and get my software to display your calculated values for T1CON, TICKS, TMR1_ON_TICKS, TMR1_OFF_TICKS. Then I will use TICKS & T1CON as constants and remove all the calculation stuff does that sound reasonable? My maths & pic knowledge is not good enough to see how all your calculation routines work

I'll just leave the final duty calculation part in

W1 = Ticks * DutyCycle ' Calc # of Ticks for ON and OFF periods
TMR1_ON_TICKS = div32 100
TMR1_OFF_TICKS = Ticks - TMR1_ON_TICKS