Okay, I learned that the Canon AVCHD cameras encapsulate EVERYTHING they shoot in a 60i (or 50i for PAL) wrapper.
So most software will see everything as 60i. While the wrapper is encoded as 60i, if you record at 30p or 24p it actually does record progressive frames for the data. So After Effects is properly interpreting my 30p footage as 30p and when I re-encode, it works properly.
And the apparent reason for the 29.97 and not “true 30p” is that the “broadcast spec” for 30p is 29.97. So again, After Effects is interpreting things correctly.
The only thing I have not been able to figure out is how to do the correct pulldown in After Effects for stuff recorded in 24p mode. I have to use FFMPEG or Neoscene to handle that.