Add static item to wp_nav_menu

The reason your PRODUCTS menu is appearing first is because you’re echoing it out to the page as part of the filter function. The expectation with filters is that your function receives an argument, $items in this case, modifies it and then returns it to be used by the core code.

In order to avoid having to rewrite the code that generates your PRODUCTS menu, we’ll make use of the output buffer:

add_filter( 'wp_nav_menu_items', 'add_nav_menu_items', 10, 2 );
function add_nav_menu_items( $items, $args ) {
     ob_start(); // start the output buffer
     ?>
     <ul>
        <li><a href="#">PRODUCTS</a>
            <ul>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Sci-Fi')));?>">SCI-FI</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'scifi','showposts'=>-1,'order'=>'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Drama')));?>">Drama</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'drama','showposts'=>-1,'order'=>'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Horror')));?>">HORROR</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'horror','showposts'=>-1,'order'=> 'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
    <?php
    $products = ob_get_clean(); // store all output from above
    return $items . $products; // add stored output to end of $items and return
}