I have taken your regex, insterted it into regexr with the examples you have given and tried to make it work.
Step by step:
1) The original regex: http://regexr.com?33snj. The problem why this regex also matches the [/link] is in the URL matching bit:
[^\s()<>]+
This will also match the open bracket character '[', therefore matching will not stop when it encounters the [/link] bit. It could be argued that the [ character is a valid URI character, but that is only under rare conditions (see this stackoverflow post for more info).
2) I decided to continue with your regex, but added the open bracket char to the negated character list:
[^\s()<>[]+
This will get you into another problem. See http://regexr.com?33snp. Because of backtracking the engine now finds a way around the negative lookahead at the end.
3) Once you make the URL matching group atomic (by adding ?> to the start of the capture group) the engine stops backtracking and we have arrived at the desired outcome.
(?<!\[link\s)((\bhttps?://www\.|\bhttps?://|(?<!//)\bwww\.)(?>[^\s()<>[]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))(?!\[/link\]))
See it in action http://regexr.com?33sns.