UTF-8 uses different number of bytes for characters (depending on the character). This can be just 1 byte (e.g. for ASCII) and can be as long as 4 bytes. With UTF-16, you have either 2 bytes or 4 bytes per character.
So whether 25 Japanese characters fit into 50 bytes or not really depends on the UTF-8 encoding of those characters. I don't know the Japanese character set well enough to comment further. As for the length, how did you determine that? It should be something like this, to know how many bytes were needed:
Code:
VALUES LENGTH(VARCHAR(..., 500), OCTETS)
Finally, if you say VARCHAR(64), it means you can store strings of a length up to 64 bytes. The number of characters in that string will be 64 or less (depending on the characters). Likewise, if you use VARGRAPHIC(64), you can store strings up to 64 double-bytes. Again, the number of characters in such strings will be restricted to 64 - or less (in case you have characters that require 2 double-bytes for their representation).