Are there constraints on where intron/exon boundaries occur with respect to the triplet codons of the reading frame?
As pointed out by others this is not true. I just verified this for humans (annotations from gencode21).
Methodology:

Obtained the start points of the CDS for all genes
For each exon of each gene, calculated the distance between the CDS start and exon end
Obtained the remainder after dividing this value  by 3 (modulo)

Commands:

Command-1:
    awk 'BEGIN{FS="\t|;";OFS="\t"} $3=="CDS"{print $4,$9}' gencode.v21.annotation.gtf > cdsstart.txt 

Command-2:
    awk 'BEGIN{FS="\t|;";OFS="\t"} NR==FNR{a[$2]=$1;next} ($3=="exon" &amp;&amp; $9 in a){if($4&gt;a[$9]) q[($5-a[$9])%3]++} END{for(i in q) print i,q[i]}' cdsstart.txt gencode.v21.annotation.gtf


Result:

position | # cases
_______________________
   -2    | 101191
   -1    | 100954
    0    | 99499

As you can see the exons do not necessarily terminate at the third position of the codon.