$ echo '<p><span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"href":"Template:Echo","wt":"Echo"},"params":{"1":{"wt":"<table class=foo>"}}}}]}"></span></p>' | bin/parse.js --html2wt --prefix mediawikiwiki {{Echo|<table class=foo>}}
This is wrong: the output should be {{Echo|1=<table class=foo>}}. Round-tripping this back to HTML breaks, because the parameter name ends up being <table class with value foo.
However, if you don't put angle brackets in, the bug doesn't happen:
$ echo '<p><span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"href":"Template:Echo","wt":"Echo"},"params":{"1":{"wt":"table class=foo"}}}}]}"></span></p>' | bin/parse.js --html2wt --prefix mediawikiwiki {{Echo|1=table class=foo}}
Removing either one of the angle brackets (opening or closing) is enough.
From a user perspective, this means that if I create a template in VisualEditor and set the value of a numbered parameter to something that contains angle brackets and equals signs, it previews correctly but saves incorrectly.