Joel,
regarding the UNICODE error something has gone wrong, because you are again trying to insert an unconverted (or badly converted) string: perhaps you could try your patch in a sample tcl script and verify if it actually does the conversion.
I also got the duplicate key problem, but I ignored it for the moment, because it is caused by the double insertion into the search_observer_queue when you create a new content (I observed this creating a news): in this case the content will be processed correctly.