We just encountered this again.
I added 2 new GPUs to the node and removed 1 (unused) NIC.  Nothing else was changed in the system.  Just 3 PCIe changes.  The already installed and assigned GPUs were not removed or changed at all, full error:
server.enable
{
  "id": "565d1ea8-582c-4596-ae1f-d96f95ef2c37"
}
{
  "errno": -104,
  "code": "ECONNRESET",
  "syscall": "write",
  "url": "https://10.169.4.124/jsonrpc",
  "call": {
    "method": "session.login_with_password",
    "params": "* obfuscated *"
  },
  "message": "write ECONNRESET",
  "name": "Error",
  "stack": "Error: write ECONNRESET
    at WriteWrap.onWriteComplete [as oncomplete] (node:internal/stream_base_commons:94:16)
    at WriteWrap.callbackTrampoline (node:internal/async_hooks:130:17)"
}
I can SSH into the node without issue.
I was looking over this: https://xcp-ng.org/docs/api.html
Tried this:
xe-toolstack-restart
I get this error now:
server.enable
{
  "id": "88698db1-9b95-4ca8-b690-98395145f282"
}
{
  "errno": -111,
  "code": "ECONNREFUSED",
  "syscall": "connect",
  "address": "10.169.4.124",
  "port": 443,
  "url": "https://10.169.4.124/jsonrpc",
  "call": {
    "method": "session.login_with_password",
    "params": "* obfuscated *"
  },
  "message": "connect ECONNREFUSED 10.169.4.124:443",
  "name": "Error",
  "stack": "Error: connect ECONNREFUSED 10.169.4.124:443
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16)
    at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17)"
}
I will try this suggested same version upgrade and report back.