Correct way to use get_template_part() and get_post_format() with custom post types?

What you’ve done will include content-competitions-<post-format>.php. I don’t know if that is what you want, but that is correct as far as structure goes.

I also don’t know what you mean by “to change that one line”, but get_template_part will use the two parameters to construct a file name/path so, yes, you do need to include all of it. Take a look at the explanation in the Codex:

<?php get_template_part( 'loop', 'index' ); ?>

will do a PHP require() for the first file that exists among these, in this priority:

        wp-content/themes/twentytenchild/loop-index.php
        wp-content/themes/twentyten/loop-index.php
        wp-content/themes/twentytenchild/loop.php
        wp-content/themes/twentyten/loop.php

What you get with get_template_part is

  1. “child or parent theme name”, first one then the other
  2. plus “first parameter”
  3. Plus “-“
  4. plus “second parameter”
  5. plus “.php”

Or …

  1. “child or parent theme name”, first one then the other
  2. plus “first parameter”
  3. plus “.php”

… if nothing is found having the second parameter.

There is no shortcut. WordPress can’t guess what file you want to include.

If you could name your files something like postformat.php you could get away with using only the first parameter though:

get_template_part( get_post_format() );

I don’t know if that is a possibility as that post-format.php file would be used for any post having that named post format.