I got an answer on WordPress Support forms, http://wordpress.org/support/topic/widget-dropdown-always-displays-first-option?replies=6
Replaced function form with,
function form( $instance ) {
// Check values
$category = isset( $instance['category'] ) ? (int) $instance['category'] : '';
$terms = get_terms( 'app_category', 'parent=0&hide_empty=0' );
if ( !empty( $terms ) && !is_wp_error( $terms ) ) {
?>
And changed,
name="<?php echo $this->get_field_name( 'Category' ); ?>"
to
name="<?php echo $this->get_field_name( 'category' ); ?>"