A comment in this question led me to the answer: sbt: publish to corporate Nexus repository unauthorized
One cannot include the port (my Archiva server is running on port 8080) on the hostname in the credentials file. It will prevent your credentials from being used during the publish.
I also specified the realm in my publishTo and moved my credential file to ~/.sbt per barnesjd's comment (though not in plugins, just in ~./sbt).
For reference to others, here is my configuration:
Build.scala
publishTo := Some("Repository Archiva Managed development Repository" at "http://XX.XX.XX.XX:8080/respository/development/"),
credentials += Credentials(Path.userHome / ".sbt" / ".archiva_credentials")
.archiva_credentials
realm=Repository Archiva Managed development Repository
host=XX.XX.XX.XX
user=myuser
password=mypassword