You can in fact remove the local IP address from the HTTP update request that is sent to dyndns.org. In that case, dyndns will decide for itself what your calling IP is and insert that.
The script is /sbin/e-smith/dynamic-dns/dyndns.org, and you just remove the parameter \&myip="$IPADDR" from the wget command.
The problem I found with a router, though, is that SME doesn't know when your router re-connects and may thus have got a new IP. You can put a call to /etc/e-smith/events/actions/update-dns in cron.hourly for example, but if you keep calling dyndns with unnecessary updates you'll get chucked off for abuse!
It means you still need to check if your IP has changed, and only update dyndns if it has. I hacked the above script a bit so it checks the IP using a PHP script I put on my hosted Web server, and saves the IP returned. Only if a different one is returned does it update dyndns.
I also added an unconditional update to cron.monthly, so dyndns doesn't think my account is dead if everything runs perfectly for more than a month.
Quite a bit of fiddling in the end, but I couldn't see a better way

PHP to return the IP is simply:
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
if (!$ip)
$ip = $_SERVER['REMOTE_ADDR'];
echo $ip;
?>
This allows for an "invisible" proxy cache if your ISP inserts one.
HTH
Rick Jones