This answer is here in order to not let this question without an almost "working" answer, if someone (by the greatest of chance) comes across this solution and wishes (strangely) to use it.
Here is the ugly solution I finally used, presented in two ways: manual method and method using a new environment.
Both methods use the legend anchor to achieve the right "inner" positioning (thanks to Ulrike Fischer's comment).
Manual solution
If there is NO overlapping, the legend is just polted with (using a scope: local bounding box=localbox) \path (localbox.south east) node[name=legend,anchor=west... 
If there is overlapping (the legend is shifted reagarding to it's own size):
First, a temporary legend node is plotted at (0,0) coodinate: 
Second, the size (widht and height) of this legend is extracted (thanks to percusse's answer here).
Third, the temporary legend is entirely hide by a white rectangle: \node (whiterec) [rectangle,fill=white,draw=white,minimum height=\legendheight pt,minimum width=\legendwidth pt] at (legend){};
Fourth, the content of the Tikzpicture is plotted.
Fifth, the final legend is plotted and shifted regarding the size of the remporary legend (here an exemple at north west): 
The MWE:
\documentclass[tikz=true,crop=true,class=minimal,border=1pt,10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}
\begin{scope}[local bounding box=localbox]
% First temporary black Legend
\path (0,0)%
node[name=legend,matrix,anchor=west,cells={nodes={font=\sffamily,anchor=west}},
draw,thick,inner sep=0.3ex]{%
\draw-latex -- ++ (0.6,0); & \node{arrow};\
};%
% Access to black legend node height and width
\pgfpointdiff{\pgfpointanchor{legend}{south west}}{\pgfpointanchor{legend}{north west}}%
\pgfmathsetmacro\legendheight{\csname pgf@y\endcsname}
\pgfpointdiff{\pgfpointanchor{legend}{west}}{\pgfpointanchor{legend}{east}}%
\pgfmathsetmacro\legendwidth{\csname pgf@x\endcsname}%
% NODES
\node (whiterec) [rectangle,fill=white,draw=white,minimum height=\legendheight pt,minimum width=\legendwidth pt] at (legend){};
\node (n1) [draw, text width=5em, minimum height=8em] {node 1};%
% ARROWS
\coordinate[above right=of n1.east] (aux2a);
\coordinate[below right=of n1.east] (aux2b);
%
\draw[-latex] (aux2a -| n1.east)
to (aux2a) node[right] {short label};
\draw[-latex] (aux2b -| n1.east)
to (aux2b) node[right] {a bit longer label};:
% LEGEND
% Final blue legend
\path ([yshift=\legendheight/2 pt+1pt]localbox.north west)%
node[name=legend,matrix,anchor=west,cells={nodes={font=\sffamily,anchor=west}},
draw,thick,inner sep=0.3ex,draw=blue!80]{%
\draw-latex -- ++ (0.6,0); & \node{arrow};\
};%
\end{scope}%
\end{tikzpicture}
\end{document}
Method using a new environment
This method uses a new tikzpictureWithInnerLegend environment wich act as a tikzpicture environment but automaticaly draw the temporary legend, get its size and plot the final legend (in the same way as the Manual Method above).
- First the style of the Final an temporary legends are defined, e.g.:
\tikzstyle{legend}=[name=legend,matrix,cells={nodes={font=\sffamily,anchor=west}},
draw,thick,inner sep=0.3ex,draw=blue!80]%
\tikzstyle{templegend}=[name=templegend,matrix,cells={nodes={font=\sffamily,anchor=west}},
draw,thick,inner sep=0.3ex,draw=white,fill=white]%
- The legend content is stored into a macro, e.g.:
\newcommand{\legendcontent}{%
\draw[-latex](0,0) -- ++ (0.6,0); \& \node{arrow};\\% Be carefful to put \& instead of &
\draw[-stealth](0,0) -- ++ (0.6,0); \& \node{arrow2};\\% Be carefful to put \& instead of &
}%
- The enviroment is called, e.g. with a lengend at
current bounding box.south east:
\begin{tikzpictureWithInnerLegend}{\legendcontent}{current bounding box.south east}[xshift=\xmin, yshift=\ymin, autoshiftsign=true]
% NODES
\node (n1) [draw, text width=5em, minimum height=8em] {node};%
% ARROWS
\coordinate[above right=of n1.east] (aux2a);
\coordinate[below right=of n1.east] (aux2b);
%
\draw[-latex] (aux2a -| n1.east)
to (aux2a) node[right] {short label};
\draw[-stealth] (aux2b -| n1.east)
to (aux2b) node[right] {a bit longer label};:
\end{tikzpictureWithInnerLegend}

- The environment options are as follows:
[xshift=\xmin, yshift=\ymin]: apply respectively a xshift and a yshift to the final legend positioning.
[autoshiftsign=true]: automatically change the sign of the xshift and yshift in order to avoid legend overlapping. Default value is false even if you just write [autoshiftsign] (i.e. the signs are directly given with the xshift and yshift options, e.g.: xshift=-3pt).
Limitations and possible improvements
- The code could be greatly improved in order to be more readable and efficient, e.g. many things are written identically in several places (in the start environment code with or without optional argument for example), as is the case with the
\pgfkeys macro.
- The use of
listofitems package could probably be avoided. This package is only used in order to split the legend location given by the user, e.g. in current bounding box.south east the key east is extracted in oder to set the legend anchor. Also, it permits to make the difference between current bounding box.south east and current bounding box.south.
Whole (ugly) code:
\documentclass[tikz=true,crop=true,class=minimal,border=1pt,10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,calc,matrix}
\usepackage{listofitems}
\usepackage{xparse}
\NewDocumentEnvironment{tikzpictureWithInnerLegend}{m m o}%
{\IfNoValueTF{#3}{%
% # Start code if no opt arg
%-----------------------------------------------------------
% ## Initialization
\pgfkeys{
/tikzpictureWithInnerLegend/.is family, /tikzpictureWithInnerLegend/.cd, %<-added /.cd
autoshiftsign/.is choice,
autoshiftsign/.default=false,
autoshiftsign/true/.code={\renewcommand{\autoShiftSignBool}{1}},
autoshiftsign/false/.code={\renewcommand{\autoShiftSignBool}{0}},
xshift/.estore in ={\xShift},
yshift/.estore in ={\yShift},
}
\newcommand{\pathLocation}{}
\newcommand{\lgdAnchor}{}
\newcommand{\xshiftSign}{0}
\newcommand{\yshiftSign}{0}
\newcommand{\xShift}{0}
\newcommand{\yShift}{0}
\newcommand{\xAutoShiftBool}{0}
\newcommand{\yAutoShiftBool}{0}
\newcommand{\autoShiftSignBool}{0}
\def\zero{0}%
\def\plus{+}%
\def\minus{-}%
\def\north{north}%
\def\south{south}%
\def\east{east}%
\def\west{west}%
% ## Main Start Code
\ignoreemptyitems% Ingnore empty items from the list
\setsepchar{.}%
\readlist\mylist{#2}%
\setsepchar{ }%
\itemtomacro\mylist[2]\mylistmacro
\readlist\mysublist{\mylistmacro}%
\itemtomacro\mysublist[1]\cardinal
\if\mysublistlen2
\renewcommand{\pathLocation}{\mylist[1].\mysublist[1] \mysublist[2]}%
\renewcommand{\lgdAnchor}{\mysublist[2]}%
\ifx\north\cardinal
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{1}%
\else
\ifx\south\cardinal
\renewcommand{\yshiftSign}{-}%
\renewcommand{\yAutoShiftBool}{1}%
\else
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{0}%
\ifx\east\cardinal
\renewcommand{\xshiftSign}{+}%
\renewcommand{\xAutoShiftBool}{1}%
\else
\renewcommand{\xshiftSign}{-}%
\renewcommand{\xAutoShiftBool}{1}%
\fi
\fi
\fi
\else
\renewcommand{\pathLocation}{\mylist[1].\mysublist[1]}%
\renewcommand{\lgdAnchor}{\mysublist[1]}%
\ifx\north\cardinal
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{1}%
\renewcommand{\lgdAnchor}{center}%
\else
\ifx\south\cardinal
\renewcommand{\yshiftSign}{-}%
\renewcommand{\yAutoShiftBool}{1}%
\renewcommand{\lgdAnchor}{center}%
\else
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{0}%
\ifx\east\cardinal
\renewcommand{\xshiftSign}{+}%
\renewcommand{\xAutoShiftBool}{1}%
\else
\renewcommand{\xshiftSign}{-}%
\renewcommand{\xAutoShiftBool}{1}%
\fi
\fi
\fi
\fi
\begin{tikzpicture} [ampersand replacement=&]
% ### Print temporary legend node
\path (0,0)%
node[templegend]{#1};%
% ### Access to temporary legend node height and width
\pgfpointdiff{\pgfpointanchor{templegend}{south west}}{\pgfpointanchor{templegend}{north west}}%
\pgfmathsetmacro\legendheight{\csname pgf@y\endcsname}
\pgfpointdiff{\pgfpointanchor{templegend}{west}}{\pgfpointanchor{templegend}{east}}%
\pgfmathsetmacro\legendwidth{\csname pgf@x\endcsname}%
\node (whiterec) [rectangle,fill=white,draw=white,minimum height=\legendheight pt,minimum width=\legendwidth pt] at (templegend){};
}%
{%
% # Start code if opt arg
%-----------------------------------------------------------
% ## Initialization
\pgfkeys{
/tikzpictureWithInnerLegend/.is family, /tikzpictureWithInnerLegend/.cd, %<-added /.cd
autoshiftsign/.is choice,
autoshiftsign/.default=false,
autoshiftsign/true/.code={\renewcommand{\autoShiftSignBool}{1}},
autoshiftsign/false/.code={\renewcommand{\autoShiftSignBool}{0}},
xshift/.estore in ={\xShift},
yshift/.estore in ={\yShift},
}
\newcommand{\pathLocation}{}
\newcommand{\lgdAnchor}{}
\newcommand{\xshiftSign}{0}
\newcommand{\yshiftSign}{0}
\newcommand{\xShift}{0}
\newcommand{\yShift}{0}
\newcommand{\xAutoShiftBool}{0}
\newcommand{\yAutoShiftBool}{0}
\newcommand{\autoShiftSignBool}{0}
\def\zero{0}%
\def\plus{+}%
\def\minus{-}%
\def\north{north}%
\def\south{south}%
\def\east{east}%
\def\west{west}%
% ## Main Start Code
\pgfkeys{/tikzpictureWithInnerLegend,#3}%
\ifx\minus\xshiftSign
\renewcommand{\xAutoShiftBool}{1}%
\else
\ifx\plus\xshiftSign
\renewcommand{\xAutoShiftBool}{1}%
\else
\renewcommand{\xAutoShiftBool}{0}%
\fi
\fi
\ifx\minus\yshiftSign
\renewcommand{\yAutoShiftBool}{1}%
\else
\ifx\plus\yshiftSign
\renewcommand{\yAutoShiftBool}{1}%
\else
\renewcommand{\yAutoShiftBool}{0}%
\fi
\fi
\ignoreemptyitems% Ingnore empty items from the list
\setsepchar{.}%
\readlist\mylist{#2}%
\setsepchar{ }%
\itemtomacro\mylist[2]\mylistmacro
\readlist\mysublist{\mylistmacro}%
\itemtomacro\mysublist[1]\cardinal
\if\mysublistlen2
\renewcommand{\pathLocation}{\mylist[1].\mysublist[1] \mysublist[2]}%
\renewcommand{\lgdAnchor}{\mysublist[2]}%
\ifx\north\cardinal
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{1}%
\else
\ifx\south\cardinal
\renewcommand{\yshiftSign}{-}%
\renewcommand{\yAutoShiftBool}{1}%
\else
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{0}%
\ifx\east\cardinal
\renewcommand{\xshiftSign}{+}%
\renewcommand{\xAutoShiftBool}{1}%
\else
\renewcommand{\xshiftSign}{-}%
\renewcommand{\xAutoShiftBool}{1}%
\fi
\fi
\fi
\else
\renewcommand{\pathLocation}{\mylist[1].\mysublist[1]}%
\renewcommand{\lgdAnchor}{\mysublist[1]}%
\ifx\north\cardinal
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{1}%
\renewcommand{\lgdAnchor}{center}%
\else
\ifx\south\cardinal
\renewcommand{\yshiftSign}{-}%
\renewcommand{\yAutoShiftBool}{1}%
\renewcommand{\lgdAnchor}{center}%
\else
\renewcommand{\yshiftSign}{+}%
\renewcommand{\yAutoShiftBool}{0}%
\ifx\east\cardinal
\renewcommand{\xshiftSign}{+}%
\renewcommand{\xAutoShiftBool}{1}%
\else
\ifx\west\cardinal
\renewcommand{\xshiftSign}{-}%
\renewcommand{\xAutoShiftBool}{1}%
\else% Center
\renewcommand{\xshiftSign}{+}%
\renewcommand{\yshiftSign}{+}%
\renewcommand{\xAutoShiftBool}{0}%
\renewcommand{\yAutoShiftBool}{0}%
\renewcommand{\lgdAnchor}{center}%
\fi
\fi
\fi
\fi
\fi
\begin{tikzpicture} [ampersand replacement=&]%
% ### Print temporary legend node
\path (0,0)%
node[templegend]{#1};%
% ### Access to temporary legend node height and width
\pgfpointdiff{\pgfpointanchor{templegend}{south west}}{\pgfpointanchor{templegend}{north west}}%
\pgfmathsetmacro\legendheight{\csname pgf@y\endcsname}%
\pgfpointdiff{\pgfpointanchor{templegend}{west}}{\pgfpointanchor{templegend}{east}}%
\pgfmathsetmacro\legendwidth{\csname pgf@x\endcsname}%
\node (whiterec) [rectangle,fill=white,draw=white,minimum height=\legendheight pt,minimum width=\legendwidth pt] at (templegend){};%
}}%
{\IfNoValueTF{#3}{%
% # End code if no opt arg
%-----------------------------------------------------------
% ## LEGEND
\path ([xshift=\xAutoShiftBool\legendwidth\xshiftSign1 pt+\autoShiftSignBool\xShift\xshiftSign1+(1-\autoShiftSignBool)\xShift,yshift=\yAutoShiftBool\legendheight/2\yshiftSign1 pt+\autoShiftSignBool\yShift\yshiftSign1+(1-\autoShiftSignBool)\yShift]#2)%
node[legend,anchor=\lgdAnchor]{#1};%
\end{tikzpicture}%
}%
{%
% # End code if opt arg
%-----------------------------------------------------------
% ## LEGEND
\path ([xshift=\xAutoShiftBool\legendwidth\xshiftSign1 pt+\autoShiftSignBool\xShift\xshiftSign1+(1-\autoShiftSignBool)\xShift,yshift=\yAutoShiftBool\legendheight/2\yshiftSign1 pt+\autoShiftSignBool\yShift\yshiftSign1+(1-\autoShiftSignBool)*\yShift]#2)%
node[legend,anchor=\lgdAnchor]{#1};%
\end{tikzpicture}%
}}%
\begin{document}
% Legend Formating
\tikzstyle{legend}=[name=legend,matrix,cells={nodes={font=\sffamily,anchor=west}},
draw,thick,inner sep=0.3ex,draw=blue!80]%
\tikzstyle{templegend}=[name=templegend,matrix,cells={nodes={font=\sffamily,anchor=west}},
draw,thick,inner sep=0.3ex,draw=white,fill=white]%
% Legend Content
\newcommand{\legendcontent}{%
\draw-latex -- ++ (0.6,0); & \node{arrow};\% Be carefful to put & instead of &
\draw-stealth -- ++ (0.6,0); & \node{arrow2};\% Be carefful to put & instead of &
}%
% Legend manual shift
\newcommand{\xmin}{0pt}% Minimal xshift to avoid ovelapping
\newcommand{\ymin}{1pt}% Minimal yshift to avoid ovelapping
\begin{tikzpictureWithInnerLegend}{\legendcontent}{current bounding box.south east}[xshift=\xmin, yshift=\ymin, autoshiftsign=true]
% NODES
\node (n1) [draw, text width=5em, minimum height=8em] {node};%
% ARROWS
\coordinate[above right=of n1.east] (aux2a);
\coordinate[below right=of n1.east] (aux2b);
%
\draw[-latex] (aux2a -| n1.east)
to (aux2a) node[right] {short label};
\draw[-stealth] (aux2b -| n1.east)
to (aux2b) node[right] {a bit longer label};:
\end{tikzpictureWithInnerLegend}
\end{document}
\begin{scope}[local bounding box=name] ... \end{scope}to create named boxes. – John Kormylo Feb 18 '22 at 22:15scopein the picture. In order to be sure I well understand your comment, your are proposing to use\begin{scope}[local bounding box=name] ... \end{scope}instead of\path (current bounding box.south east)...for the legend "block" only right? – zetyty Feb 19 '22 at 19:54(current bounding box.south east)useanchor=north east. – Ulrike Fischer Feb 24 '22 at 16:55