Bruno's answer of using \protect\today works for the \allcaps treatment (though I'm not sure why you'd want to print an ISO-format date with that spacing).
You can't use \today as an argument to \printdate. It needs to be in the format yyyy-mm-dd, mm.dd.yyyy, or dd/mm/yyyy.
\documentclass{tufte-handout}
\usepackage[iso,american]{isodate}
\begin{document}
\allcaps{\protect\today}% <-- added \protect
\printdate{2012/03/20}
\printdate{20.03.2012}
\printdate{20/03/2012}
\end{document}
Based on the comments below, here's a more complete solution:
\documentclass{article}
\usepackage[iso,american]{isodate}
\makeatletter
% Set default date to today's date (in ISO format)
\xdef\@date{\the\year-\the\month-\the\day}
% Helper macro to avoid @s in macro name
\newcommand{\thedate}{\@date}
% Helper macro to avoid more typing
\newcommand{\printthedate}{\printdate{\@date}}
\makeatother
% Optionally change the date
%\date{2010-01-31}% must be in ISO format
\begin{document}
% Prints the date set by \date or today's date by default
\printdate{\thedate}
% Same as above
\printthedate
\end{document}
First, we redefine \@date to be today's date (using the ISO format). This means that if \date isn't specified, we'll default to today's date.
Next, we've written a \thedate helper macro. This just saves us some typing in the document. Without this macro, we'd have to write \makeatletter\printdate{\@date}\makeatother instead of \printdate{\thedate}. Additionally, we've created a \printthedate macro that is equivalent to \printdate{\thedate}. (Yes, I'm a lazy typist!)
If you want to use a date other than today's date, you must specify it using in ISO format \date{yyyy-mm-dd} (or one of the other formats supported by the \printdate macro).
Finally, the document demonstrates the helper macros.
\protect\todayinstead of\today(I can't test right now). – Bruno Le Floch Mar 20 '12 at 22:33