what could cause get_stylesheet_directory_uri() to fail?

That would be because get_stylesheet_directory_uri only returns a value. If you want to echo it to to the screen you have to include echo or print.

<img src="https://wordpress.stackexchange.com/questions/35384/<?php echo get_stylesheet_directory_uri(); ?>/images/logo.jpg" />

bloginfo works fine as well, but when you do stylesheet_directory it’s just a wrapper for get_stylesheet_directory_uri

<?php
function get_bloginfo( $show = '', $filter="raw" ) {

    switch( $show ) {
        // snip snip

        case 'stylesheet_directory':
            $output = get_stylesheet_directory_uri();
            break;
        // snip snip
    }
    $url = true;
    if (strpos($show, 'url') === false &&
        strpos($show, 'directory') === false &&
        strpos($show, 'home') === false)
        $url = false;

    if ( 'display' == $filter ) {
        if ( $url )
            $output = apply_filters('bloginfo_url', $output, $show);
        else
            $output = apply_filters('bloginfo', $output, $show);
    }

    return $output;
}