Un nœud, même vide, a une certaine taille à moins de lui spécifier le contraire (il me semble que cela est possible).
Le plus simple est de spécifier que le cycle doit se faire à partir du centre du nœud : :`(n1.center)` par exemple.
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\definecolor{white smoke}{rgb}{0.96, 0.96, 0.96}
\tikzstyle{corner}= [outer sep = 0 pt, inner sep = 0 pt]
% White smoke background to match
% texnique.fr's code background color (#f5f5f5 in HTML)
\filldraw[white smoke] (0, 0) rectangle (6, 6) ;
% Outer square
\draw[red, ultra thick] (1, 1) rectangle (5, 5) ;
% Node 1
\node (n1) at (2, 4) [corner] {} ;
% Node 2
\node (n2) at (4, 4) [corner] {} ;
% Node 3
\node (n3) at (4, 2) [corner] {} ;
% Node 4
\node (n4) at (2, 2) [corner] {} ;
% Inner square
\draw[ultra thick, green!50!black] (n1.center) -- (n2.center) -- (n3.center) -- (n4.center) -- (n1.center) -- cycle ;
\end{tikzpicture}
\end{document}
![alt text][1]
[1]: http://texnique.fr:80/osqa/upfiles/rec.PNG<img src="/upfiles/rec.PNG" style="width: 80%;"/>