In dem Fall ist das `\catcode`-Problem doppelt. Zu dem bekannten Problem innerhalb einer `frame`-Umgebung kommt noch: Die *Token* der Argumente eines Befehls (im Beispiel `\scalebox`) haben den `\catcode`, den sie beim Lesen des Arguments bekommen haben. Beim Lesen des Argument werden sie nicht ausgeführt, so dass die `tikzpicture`-Umgebung innerhalb des Arguments den `\catcode` von `"` nicht mehr ändern kann. Es gibt nun zwei Möglichkeiten, das Problem zu lösen:
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}
\newsavebox\tikzsavebox
\begin{document}
\begin{lrbox}{\tikzsavebox}
\begin{tikzpicture}
\draw (2,-2) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C);
\pic["$\ldotp$",draw] {angle};
\end{tikzpicture}%
\end{lrbox}
\begin{frame}
\scalebox{2}{\usebox{\tikzsavebox}}
\end{frame}
\end{document}
Wie Du siehst, braucht man hier nicht einmal mehr `fragile`. Die andere Möglichkeit besteht wieder darin, die *shorthands* das `babel` *shorthand* `"` zu deaktivieren, bevor das Argument gelesen wird:
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}
\begin{document}
\begin{frame}[fragile=singleslide]
\shorthandoff{"}
\scalebox{2}{%
\begin{tikzpicture}
\draw (2,-2) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C);
\pic["$\ldotp$",draw] {angle};
\end{tikzpicture}%
}
\end{frame}
\end{document}
Was Dir besser gefällt, musst Du selbst entscheiden. Die `lrbox`-Variante ist universeller und dürfte auch für andere Zeichen funktionieren, die TikZ in einem ganz bestimmen `\catcode` benötigt. `lrbox` ist übrigens im [`usrguide`](http://www.ctan.org/pkg/usrguide) dokumentiert.