`dinbrief` definiert `\enddocument` (der Befehl, der durch `\end{document}` aufgerufen wird) um, und zwar so, dass unter anderem `\@enddocumenthook` nicht aufgerufen wird. Ohne `\@enddocumenthook` sind alle Anweisungen in, die mit `\AtEndDocument` eigentlich am Ende des Dokuments gemacht werden sollten, verloren. Gerade die braucht `pythontex` aber, da hier wichtige Informationen in die `pytxcode`-Datei geschrieben werden. Da die mit `dinbrief` nun fehlen, ist die Datei logischerweise fehlerhaft. Daher dann auch die Fehlermeldung.
Du kannst das mit `etoolbox` und `\patchcmd` nun reparieren:
\documentclass{dinbrief}
\usepackage{pythontex}
\usepackage{etoolbox}
\makeatletter
\patchcmd\enddocument
{\@checkend{document}}
{\@enddocumenthook\@checkend{document}}
{}
{Fehler: Patch misslungen}
\makeatother
\begin{document}
\begin{pycode}
print('Hello DIN')
\end{pycode}
Hello
\end{document}
Mein Bauchgefühl und die Tatsache, dass die Umdefinierung von `\enddocument` weitere Nachteile mit sich bringt (siehe Kommentare) sagt mir aber, dass es klüger wäre, auf eine modernere Alternative `scrartcl2` oder `scrletter` (mit `scrartcl`) umzusteigen, und `dinbrief` gar nicht zu verwenden. Letzteres hat seit 2007 kein Update mehr erhalten. Das muss zwar nichts heißen, darum auch nur ein Bauchgefühl…erhalten, das log deutet an, dass der Großteil 17 Jahre alt ist:
Document Class/Style 'dinbrief' - Version 1.73
University of Karlsruhe - 2000/03/02 12:49:21
*** dinbrief: Running in LaTeX 2e mode!
*** dinbrief: NFSS 2!
Document Class: dinbrief 2000/03/02 LaTeX2e class
Die beiden Hinweise `Running in LaTeX 2e mode!` und `dinbrief: NFSS 2!` erstaunen heutzutage einigermaßen, gelten sie doch seit 1989.