Did you check whether the udhcpc process is running with or without your call of /etc/init.d/dhcp.sh ? Usually the dhcp client is always running and there's no need to start it by hand (btw. .xsession isn't the right place for that either, you should run it from /opt/bootlocal.sh - as I stated before, IF it is necessary at all).
Other suggestions:
1.) Implement something like an ifconfig check instead of just "hoping" you will have a network connection, that looks like
IP=xxx.xxx.xxx.xxx
if [ -n "$(ifconfig | grep inet | cut -d':' -f2 | cut -d' ' -f1 | grep 192)" ];then
rdesktop $IP 1>>/tmp/rdp.log 2>&1
else
echo "Don't have network." >> /tmp/rdp.log
sleep 10
fi
(you can of course wrap this into a loop, replace the 192 with the network prefix you will have, just for debugging)
The reason is that rdesktop doesn't have great debugging capabilities... it just hangs up if the connection is lost or some other network error occurs. Look at the /tmp/rdp.log if somethings going wrong. And don't use -f for debugging as it only makes that part harder ;-)