Desde un evento OnValidate no te recomiendo volver al valor anterior por código. El usuario regularmente podrá hacerlo presionando Esc sobre el DBControl o bien cancelando la operación de inserción/edición.
Me parece extraño que no te funcione el DataSet.Cancel, dado que el evento se generará siempre que el estado del registro sea dsInsert o dsEdit. Quizas estas tratando de cancelar otro dataset y no el que genera el evento.
Hasta luego.
