I had the same problem, and I wonder why the default widgets are not using searchform.php, instead they are generating the same code again..
Well I opened widgets.php and changed the wp_widget_search function as follows:
<?php
echo $before_widget;
if ( file_exists(TEMPLATEPATH . '/searchform.php') {
include (TEMPLATEPATH . '/searchform.php');
} else {
?>
<form id="searchform" method="get" action="<?php bloginfo('home'); ?>">
<div>
<input type="text" name="s" id="s" size="15" /><br />
<input type="submit" value="<?php echo attribute_escape(__('Search')); ?>" />
</div>
</form>
<?php
}
echo $after_widget; ?>
And everything works fine now. Ofcourse next update to WP will most likely write over this modification so I have to change this portion everytime I update WP. 🙁