The wording in N2900 uses the static initialization wording for initialization with {}. For the case of a union, the static initialization is described as:
the first named member is initialized (recursively) according to these rules, and any padding is initialized to zero bits

Firstly, as not a purely interoperability concern, the definition of padding here is unclear. Does this refer to padding added to the end of the union to achieve the required alignment in cases where the largest member does not have the greatest alignment requirement? Does it refer to the union of the trailing padding in the union type and the intersection of all the alignment padding and the padding bits within integer subobjects of the union members?

It seems the presence of a separate paragraph in 6.2.6, "Representation of types" to talk about bytes that correspond to other members of a union after talking in the preceding paragraph about padding bytes mean that the bytes corresponding to other members are not automatically considered padding. This interpretation is the one that is consistent with the idea that what constitutes padding is a static property of a type and not a dynamic property of an object.

Secondly, the semantics specified does not match what C++ does for the same syntax.

From [dcl.init.aggr]:
If the aggregate is a union and the initializer list is empty, then
— if any variant member has a default member initializer, that member is initialized from its default
member initializer;
— otherwise, the first member of the union (if any) is copy-initialized from an empty initializer list.

Only the first member is initialized. The "padding" is left uninitialized.