I have an iPhone 3Gs which was on 4.2.1 with the ipad baseband unlock. I used pwnagetool to make a custom firmware for 4.3.1 and restored only to find that towards the end of the restore process it went back into recovery mode and not it's stuck that way. I managed to get it to boot twice using redsn0w to boot tethered but after a few minutes it crashed and now when i try to restore to a 4.2.1 custom firmware but i get error 28.
A few people seem to be having this problem in regards to 3gs. Me as well. I gave up and went back to 4.2. If you didn't use tinyumbrella and saved your shsh, then your pretty much screwed there...