How do I ensure that figures appear in the section they're associated with?

Use the placeins package.

As noted in the comments, you can use

\usepackage[section]{placeins}

to automatically ensure floats do not go into the next section.

The package also gives you a \FloatBarrier command that you can use to prevent floats to appear beyond some point in your document. Use it as

% ... some floats here ...

\FloatBarrier

\subsection{My new subsection} 

The command \clearpage will not only start a new page, but will also force any unset floats to be set before the page break. For documents with a left and a right page, \cleardoublepage does the same, but also ensures that the next non-blank page is a right hand page.

This is all independent of the section break, save that if you are using a class that does not put a page break before section breaks, this method will force them. But, from your question, this doesn't seem to be a problem in your case.


I'm now using:

\usepackage{placeins}

\let\Oldsection\section
\renewcommand{\section}{\FloatBarrier\Oldsection}

\let\Oldsubsection\subsection
\renewcommand{\subsection}{\FloatBarrier\Oldsubsection}

\let\Oldsubsubsection\subsubsection
\renewcommand{\subsubsection}{\FloatBarrier\Oldsubsubsection}

This is shamelessly plugged from the union of this and other answers on the topic, plus this. As I can't comment yet (silly requirement, that..), I'm sharing it with via a new answer instead.

Edit: Plus, for the sake of copy-pastability for others, I've incorporated egregs excellent correction to use the non-argumented version of section redefinition (before, the snippet above read \renewcommand{\section}[1]{\FloatBarrier\Oldsection{#1}} etc. - Thanks, egreg