Updated 2-4-13
Update 2.60
I was able to reproduce the client crash twice in a row. Indeed, it happens when the reward bags become full. I believe it happens because it will get caught in an infinite loop that constantly calls UO.Property, and that is it. Instead of throwing in an arbitrary wait that isn't always needed except to keep the client from crashing when the script is going to bug anyway, I've added error checking.
In the event that you cannot store a book back in its original bag, it will look for a bag that can accommodate it. If it finds one, then the script continues on its merry way. If it cannot, then the script throws and error and halts. Thus, it may be beneficial if you declare extra, empty bags, when you do your sorting for bod book overflow.
I also added checks to slow down the emptying function. If it's too slow, let me know, and we can tweak it to speed it up a bit as long as it doesn't start reliably producing crashes.
This script is now dependent upon my updated library script, kalilib.lua v3.00, linked in OP. You will also receive and error message if you do not update the library script.