Only display a certain number of posts, dependent on how many posts there are available in a query

You don’t have to run two queries, as you already got what you want (even more).

$args = array (
    'post_type' => 'mytheme_posttype',
    'post_status' => 'publish',
    'numberposts' => 12,
);
$sliderQuery = new WP_Query($args);

$num_posts = $sliderQuery->post_count;
if ($num_posts >=4) {

    if ($num_posts >= 12)
        $postsToPrint = 12;
    elseif ($num_posts >=8)
        $postsToPrint = 8;
    else
        $postsToPrint = 4;

    while ($sliderQuery->have_posts() && $postsToPrint--) {
        $sliderQuery->the_post();

        // Work with the post
    }
}

// EDIT
Okay, here’s a little explanation of what happens, and how/why this works…

Initially, $postsToPrint is set to what you want it to be (i.e., 4, 8, or 12 – depending on the total number of posts). We then decrement the counter variable ($postsToPrint-- is the same as $postsToPrint = $postsToPrint - 1). As long as we’ve not yet retrieved as many posts as we want, we go on. If we’ve reached our defined maximum posts number, we break (i.e., leave) the loop.

So, the above while() is an efficient version of the following, fully expanded version:

while ($sliderQuery->have_posts() && $postsToPrint > 0) {
    $sliderQuery->the_post();

    // Work with the post

    // We've handled another post, so decrement the number of posts to be handled
    $postsToPrint = $postsToPrint - 1;
}

I hope this makes it a little bit clearer…