So I'm not sure if there's a trivial way to do this, but it's all easy enough to compute (caveat emptor: it could be slow). Basically we'll just determine what the left and bottom WindowMargins will have to be to put a point anc at a point pt in our new dialog.
First we need a basic function to compute scaled window positions (even though it's long it's really a boring, simple function). It uses the trueWindowSize from this answer.
scaledNotebookPositions // Clear scaledNotebookPositions[ nb_NotebookObject, point : {_, _} | Automatic : Automatic ] := Module[{ ws = trueWindowSize[nb], pt = Replace[point, Automatic :> {Center, Center}] }, Floor /@ { Replace[ Replace[pt[[1]], {Center :> Scaled[.5], Left :> Scaled[0], Right :> Scaled[1]} ], { Scaled[i_?NumericQ] :> ws[[1]]*i, i_?NumericQ :> ws[[1]]/2 + i, _ :> ws[[1]]/2 } ], Replace[ Replace[pt[[2]], {Center :> Scaled[.5], Bottom :> Scaled[0], Top :> Scaled[1]} ], { Scaled[i_?NumericQ] :> ws[[2]]*i, i_?NumericQ :> ws[[2]]/2 + i, _ :> ws[[2]]/2 } ] } ]
Then a function to align a point in the dialog with a point in the original notebook:
positionedDialog // Clear positionedDialog[ parent_NotebookObject, dialog_Notebook, point : {_, _} | Automatic : Automatic, anchor : {_, _} | Automatic : Automatic, return : True | False : False ] := Module[{ marg = {#[[1]], Automatic} & /@ AbsoluteCurrentValue[parent, WindowMargins], dia = CreateDocument[dialog, Visible -> False, System`DynamicUpdating -> False], pt, anc }, pt = scaledNotebookPositions[parent, point]; anc = scaledNotebookPositions[dia, anchor]; marg = MapThread[ ReplacePart[#, 1 -> #[[1]] + #2 - #3] &, {marg, pt, anc} ]; If[! return, SetOptions[dia, { WindowMargins -> marg, WindowFloating -> True, Visible -> Lookup[Options[dialog], Visible, True], System`DynamicUpdating -> Lookup[Options[dialog], System`DynamicUpdating, True] }]; SetOptions[dia, WindowFloating -> False ];, NotebookClose[dia]; Insert[dialog, WindowMargins -> marg, 2 ] ] ]
And here's a basic test case:
$dialog = CloudImport@ CloudObject[ "https://www.wolframcloud.com/objects/b3m2a1/banner-dialog-example.nb"]; (* If that fails use this *) $dialog = Notebook[{}, WindowSize -> {300, 350}, StyleDefinitions -> "Palette.nb", System`ClosingSaveDialog -> False ];
And here's our test case:
positionedDialog[EvaluationNotebook[], $dialog ]

And here's another, with a different alignment:
positionedDialog[EvaluationNotebook[], $dialog, {Right, Top}, {Scaled[.65], Top} ]

Here's an example where you simply pull out the WindowSize and WindowMargins options from positionedDialog and pass them to a different function:
ChoiceDialog["Pick", {}, Options[ positionedDialog[EvaluationNotebook[], Notebook[{}, WindowSize -> {350, 100} ], True ], { WindowMargins, WindowSize } ] ]

Note that I supplied a WindowSize for the ChoiceDialog implicitly in that Notebook: i.e.
Notebook[{}, WindowSize -> {350, 100} ]
For dialogs that supply some minimum size (think ChoiceDialog, MessageDialog) this type of thing is necessary.