So as nobody answered this question, I found a workaround which seems to resolve my issue. I changed the stroke width from 1 to 1.5. However this unfortunately doesn't explain what happened here, and why the ShapePath object behaves this way. I have my own idea about that: I think it's a kind of pen alignment, as in GDI+ (https://docs.microsoft.com/en-us/windows/win32/api/gdiplusenums/ne-gdiplusenums-penalignment), however I found absolutely no way to configure that.
So below is my solution, which works correctly in all situations on my side:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Shapes 1.15
import QtGraphicalEffects 1.15
import QtQuick.Templates 2.15 as T
/**
* Dashed border
*@author JMR
*/
T.Control
{
    // advanced properties
    property real   m_StrokeWidth: 1.5
    property int    m_Radius:      5
    property string m_FillColor:   "transparent"
    property string m_StrokeColor: "#bac1db"
    /**
    * Background rectangle
    */
    Rectangle
    {
        // common properties
        anchors.fill: parent
        color: m_FillColor
        radius: m_Radius
        /**
        * Dashed outline shape
        */
        Shape
        {
            // common properties
            id: shDashedBorder
            anchors.fill: parent
            anchors.margins: 0
            //layer.enabled: true
            //layer.samples: 8
            smooth: true
            clip: true
            /**
            * Dashed outline shape path
            */
            ShapePath
            {
                // common properties
                fillColor: "transparent"
                strokeColor: m_StrokeColor
                strokeWidth: m_StrokeWidth
                strokeStyle: ShapePath.DashLine
                dashPattern: [5, 5]
                startX: m_Radius
                startY: 0
                // path commands
                PathLine {x: shDashedBorder.width - m_Radius; y: 0;}
                PathQuad {x: shDashedBorder.width;            y: m_Radius;                         controlX: shDashedBorder.width; controlY: 0;}
                PathLine {x: shDashedBorder.width;            y: shDashedBorder.height - m_Radius;}
                PathQuad {x: shDashedBorder.width - m_Radius; y: shDashedBorder.height;            controlX: shDashedBorder.width; controlY: shDashedBorder.height;}
                PathLine {x: m_Radius;                        y: shDashedBorder.height;}
                PathQuad {x: 0;                               y: shDashedBorder.height - m_Radius; controlX: 0;                    controlY: shDashedBorder.height;}
                PathLine {x: 0;                               y: m_Radius;}
                PathQuad {x: m_Radius;                        y: 0;                                controlX: 0;                    controlY: 0;}
            }
        }
    }
}