ORF (Open Reading Frame) is best seen as a hypothesis of a protein coding region. It is the stretch of DNA between a start codon and the next stop codon. It is not a hypothesis of the whole protein coding region in eukaryotes (due to introns). CDS should be the whole coding region.
Both those start/stop 'codons' could be just randomly found in an intergenic region that does not actually code for any protein- so not every ORF means a protein. An ORF will be found between the actual start codon of a protein coding gene and the next stop codon. It is quite possible that this stop codon will be found in an intron, in which case the ORF includes an exon and part of an intron. Since introns are mostly just random sequence a stop codon could just occur by chance. If the intron by chance does not contain a stop 'codon' (ie 3 nucleotides TAA/TAG/TGA in the same reading frame as the exon) then the ORF will continue until it meets a stop codon- either randomly in the next intron, else a genuine stop at the end of the gene.
If the intron without a stop is not a multiple of 3 nucleotides, then it will introduce a frameshift, and the next stop could easily occur within the next exon. If it is a multiple of 3 it will introduce false amino acids into the ORF as it continues through the intron and into the exon. These sorts of errors are not uncommon in gene annotation, since intron detection is complex, and if it 'reads through' the intron might not be annotated until cDNA sequences are compared to the genome sequence.
If you want to see a demonstration of these ideas try getting a sequence from GenBank for a gene that contains a leader sequence 5'-UTR, exons, introns, 3'UTR. The CDS will be annotated as such and will just be exonic regions. Take this gene sequence and use NCBI ORF-Finder which will outline all the potential ORFs. Some of these, but not all, will be the actual coding parts.