In practical terms, your controller can only delay the timing, it can't advance it. Or, put another way, if you need to advance the timing then the only way to achieve it is by timing it from the preceding ignition event based on your extrapolated RPM. This means that if you need to advance the ignition you're going to be vulnerable to crank speed variation, especially at low speed and when starting. You might want to have a 'direct' mode when the speed is below some threshold, where the output timing exactly matches the input timing. (Unless there are any tricks you want to play with the timing to make starting easier.)
Your other option is to advance the base (mechanical) timing and then retard it electronically so that you can achieve advance and retard overall. However, if you're using a dizzy based ignition you need to ensure that the total range of possible timing always stays within the fixed physical timing range of the rotor arm, otherwise you risk misfiring and cross firing problems.