Your external hard drive has probably gone into power save mode and its power up sequence is taking a fraction longer than Windows is prepared to wait. Once Windows has decided that the device had a serious error, it's probably forceable unmounting the drive and reattaching all over again, which is why it shows up on the desktop again.
Regarding the bootmanager: when using FAT as filesystem then syslinux would be one approach. Especially when booting from USB you might consider using grub for booting, as you'll be flexible with the grub shell (providing a nice tab-completion). To install grub you'd be running something like:
mount /dev/sdX /mnt/
grub-install --recheck --no-floppy --root-directory=/mnt /dev/sdX
and adjust /boot/grub/menu.lst accordingly.
Your bootloader has to load kernel and initrd. So those files have to be outside your debianroot.img (unless you're using the ISO approach and grub2 with its loopback option, see http://michael-prokop.at/blog/2009/05/25/boot-an-iso-via-grub2/) and need to be referenced/configured in your bootloader (being syslinux.cfg for syslinux, menu.lst for grub1 and grub.cfg for grub2). The following is an example menu.lst file used for the grml live system (http://grml.org/) generated by grml2usb (http://grml.org/grml2usb/):
# misc options:
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
foreground = 000000
background = FFCC33
title grml - Default boot (using 1024x768 framebuffer)
kernel (hd0,0)/boot/release/grml/linux26 apm=power-off vga=791 quiet boot=live nomce live-media-path=/live/grml/
initrd (hd0,0)/boot/release/grml/initrd.gz
The initrd file has to locate the debianroot.img on your devices and loopback mount it then. Then it should change your root file system via e.g. pivot_root (see http://linux.die.net/man/8/pivot_root) to inside the mounted loopback file. You can find more details regarding the initrd process in Documentation/initrd.txt of the linux kernel sources: http://lxr.linux.no/linux/Documentation/initrd.txt
If you'd like to know how common live systems do this kind of stuff check out debian-live (http://debian-live.alioth.debian.org/) or grml-live (http://grml.org/grml-live/) in combination with live-initramfs (which does all the initrd/initramfs magic and is used in most Debian based live systems; http://packages.debian.org/sid/live-initramfs).
A different approach to your debianroot.img approach would be talking an existing Debian based Linux Live system providing so called "root persistency" (for example the official Debian-live project provides this as well as grml 2009.05 does).
Best Answer
You probably already have udev running on your system, and it is monitoring connect/disconnect events. With the proper configuration it can trigger scripts to run, but it is primarily designed to create the device nodes.
On a Debian/Ubuntu system take a look at the existing rules in
/lib/udev/rules.d
, and /etc/udev/rules.d`. See the Run section of the udev man page, for details about executing a task.See: