An Deiner Stelle würde ich erst einmal die Formeln aufräumen, also aus
PWMchannel[pinCount][hour] + ((3600000 - (3600000 - ((mins * 60000) + (sec * 1000)))) / (3600000 / (PWMchannel[pinCount][hour+1] - PWMchannel[pinCount][hour])));
zunächst
PWMchannel[pinCount][hour] + (mins * 60000 + sec * 1000) / (3600000 / (PWMchannel[pinCount][hour+1] - PWMchannel[pinCount][hour])));
Dann sieht man schon klarer was los ist. Deine Zwischenergebnisse sind viel zu groß. Der Punkt ist, daß nicht nur der Typ der Ergebnisvariable auseichen muß sondern auch der für die Zwischenergebnisse. Du hast vermutlich nur die Ergebnisse auf long gesetzt. Damit die Zwischenergebnisse auch noch hinkommen muss aber auch dort alles reinpassen.
Also
PWMchannel[pinCount][hour] + ((long)mins * 60000L + (long)sec * 1000L) / (3600000L / (PWMchannel[pinCount][hour+1] - PWMchannel[pinCount][hour])));
Wenn das auch nicht hilft, dann nimm zur Not floats, aber eigentlich sollte das nicht nötig sein.