As I pointed out earlier, your backup copy and the active copy of the bitmap as pointing to the same resource in memory and thus when one is disposed, other will also be disposed. So, you can start by making changes to RestorePrevious() so that the backup copy contains a fresh copy. You can try something like
internal void RestorePrevious()
{
_bitmapbeforeProcessing = _currentBitmap.Clone();
}
See if that helps.
However, some of the logic doesn't make sense to me. Like why create a dummy bitmap object in CurrentBitmap property? It will only cause logical errors later on which are harder to debug should a problem occur. Also the way you are handling backup-restore procedure could be made simpler. Your code contains all the right stuff, but can be made better by a simple re-design/structuring of the code.
Always refactor your code.