Try this if
statement instead:
if ( is_category() && ( is_category( 59 ) || cat_is_ancestor_of( 59, get_queried_object_id() ) ) )
Update: To work for single posts:
if ( is_single() && $terms = get_the_category( get_queried_object_id() ) ) {
foreach ( $terms as $term ) {
if ( $term->term_id == 59 || cat_is_ancestor_of( 59, $term->term_id ) ) : ?>
<link rel="stylesheet" href="https://wordpress.stackexchange.com/questions/71830/<?php bloginfo("template_url'); ?>/products.css" type="text/css" media="screen" />
<?php
break;
endif;
}
}