Maxim and Eric show us in their article how to make use of document library event handlers to add a recycle bin functionality to Windows SharePoint Services. There is one little line of code that I however avoid most of the time. When you want to move a document from one document library to another, you have the MoveTo() method of the SPFile type. Very easy method to use but it has one big disadvantage. When you create a document in a library, SharePoint adds values for the internal CreatedBy(), ModifiedBy(), TimeCreated() and TimeModified(). These are important fields to track what is going on with your document (especially when for example you want to comply to the ISO standards). When you use the MoveTo() to move the document to a new library, those field values are replaced by the credentials that are used to execute your code (that is, the identity of the application pool by default). Bad thing, certainly if you know that these fields are read-only fields and cannot be changed so easy from within your code.

There is another way to move a document from one library to another that we use in our 'Building Solutions with SharePoint' course. You can also add the SPFile you have in document library 1 to the SPFileCollection of the SPFolder you want to have it in for the second document library. Advantage is that you can during the Add() method call, send as parameters the values of the 4 important fields. So here is my version of the MoveTo():

   '-- Step 4 - Move the document
   Dim lists As SPListCollection = listEvent.Site.OpenWeb().Lists
   lists.IncludeRootFolder = True
   Dim docLib As SPList = listEvent.Site.OpenWeb().Lists("Reviewers Library")

   Dim draftFile As SPFile = _
              listEvent.Site.OpenWeb().GetFile(listEvent.UrlAfter)
   Dim buffer() As Byte = draftFile.OpenBinary()

   Dim folder As SPFolder = listEvent.Site.OpenWeb().Folders("Reviewers Library")
   Dim newFile As SPFile = _
            folder.Files.Add(folder.Url & "/" & draftFile.Name, buffer, _
            draftFile.Author, draftFile.ModifiedBy, _
            draftFile.TimeCreated, draftFile.TimeLastModified)

Don't forget to set the IncludeFolder property of the SPListCollection that you retrieve from the SPWeb is set to true before you actually get your list.  

Hope this was useful!