After some extensive digging it looks like the attempts option is not being used properly in resolv.conf, turns out there is a subtle bug and it does not appear to read the value correctly. 

Looking at the old code this did work but must have broken when the resolv.conf reading was refactored out, below is the fix for this (first time submitting a patch here so hopefully I am doing it right).

---
 src/network/resolvconf.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/network/resolvconf.c b/src/network/resolvconf.c
index 2cf1f475..4c3e4c4b 100644
--- a/src/network/resolvconf.c
+++ b/src/network/resolvconf.c
@@ -45,8 +45,8 @@ int __get_resolv_conf(struct resolvconf *conf, char *search, size_t search_sz)
  if (z != p) conf->ndots = x > 15 ? 15 : x;
  }
  p = strstr(line, "attempts:");
- if (p && isdigit(p[6])) {
- p += 6;
+ if (p && isdigit(p[9])) {
+ p += 9;
  unsigned long x = strtoul(p, &z, 10);
  if (z != p) conf->attempts = x > 10 ? 10 : x;
  }
-- 
2.11.0