WordPress Custom Fields (Checkboxes with multiple values)

Under the premise, that your database entries do get saved correctly and your problem occurs on retrieval only:

If multiple boxes had been selected, the values should live in the database as serialized arrays.
Fortunately, get_post_meta unserializes them for us, but they are still arrays.
Hence, your conditional should be modified like so:

$program_flags = get_post_meta( $post->ID, 'program_flags', true );

if(
    'No-marketing-text' === $program_flags
    ||
    ( is_array( $program_flags ) && in_array( 'No-marketing-text', $program_flags ) )
){
    // do your thing
}