Sub-category single post styling?

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;
    }
}