A simple(?) modification of the algorithm would be to apply the adjustment after a certain amount of time rather than at a certain block number.
Have you considered the following post which might outline an elegant solution to the problems you raise?
http://bitcointalk.org/index.php?topic=425
ByteCoin