I've had exactly the same problem. One way round it is to lock() with the previous state and then merge() with the new state, rather than doing update() with just the new state.
Then hibernate is aware of the before/after and it is available in the interceptors/event listeners.