v3.0 DotNetTemplateEngine:
/// <summary>
/// Gets the user code region with the name specified. If no region is found, a new one with simply a start and an end marker is created.
/// </summary>
/// <param name="name">Name.</param>
/// <param name="commentToken">Comment token.</param>
/// <param name="endCommentToken">The end comment token. Empty string by default, but can be used for enclosing comment markers, like within XML/HTML</param>
/// <param name="initialRegionContents">The initial region contents, added to the region when the region isn't found (so a new one is created).</param>
/// <param name="emitTrailingCrLf">if set to <c>true</c> a trailing CRLF is emitted in the output after the end marker. Default is true.</param>
/// <returns>
/// the contents of the region with the name specified in the original file contents, if present, otherwise a new region, with the
/// initialREgionContents added as the initial region contents.
/// </returns>
public static string GetUserCodeRegion(string name, string commentToken, string endCommentToken, string initialRegionContents, bool emitTrailingCrLf)
{
...
so it is available in the v3.0 engine. Could you indeed try 3.1 or at least the latest 3.0 build?